|
|
Компьютеры - Сокеты Беркли - Функции23 января 2011
Оглавление: 1. Сокеты Беркли 2. Интерфейс сокета Беркли 3. Заголовочные файлы 4. Функции 5. Дополнительные параметры для сокетов 6. Передача данных 7. Пример клиента и сервера, использующих TCP 8. Пример клиента и сервера, использующие UDP
socket
socket создает конечную точку соединения и возвращает дескриптор. socket принимает три аргумента:
- domain, указывающий семейство протоколов создаваемого сокета. Например:
PF_INET для сетевого протокола IPv4 или
PF_INET6 для IPv6.
PF_UNIX для локальных сокетов.
- type один из:
SOCK_STREAM или потоковый сокет)
SOCK_DGRAM
SOCK_SEQPACKET или
SOCK_RAW .
- protocol определяет используемый транспортный протокол. Самые распространенные это
IPPROTO_TCP , IPPROTO_SCTP , IPPROTO_UDP , IPPROTO_DCCP . Эти протоколы указаны в <netinet/in.h>. Значение «0 » может быть использовано для выбора протокола по умолчанию из указанного семейства и типа.
Функция возвращает −1 в случае ошибки. Иначе, она возвращает целое число, представляющее присвоенный дескриптор.
Прототип
#include <sys/types.h>
#include <sys/socket.h>
int socket;
gethostbyname и gethostbyaddr
Функции gethostbyname и gethostbyaddr возвращают указатель на объект типа struct hostent, описывающий интернет-узел по имени или по адресу, соответственно. Эта структура содержит или информацию, полученную от сервера имен или произвольные поля из строки в /etc/hosts. Если локальный сервер имен не запущен, то эти подпрограммы просматривают /etc/hosts. Функции принимают следующие аргументы:
- name, определяющий имя хоста. Например: www.wikipedia.org
- addr, определяющий указатель на struct in_addr, содержащую адрес хоста.
- len, определяющий длину в байтах addr.
- type, определяющий тип области адресов хоста. Например: PF_INET
Функции возвращают NULL-указатель в случае ошибки. В этом случае может быть проверена дополнительная целая h_errno для выявления ошибки или неправильного или неизвестного хоста. В противном случае возвращается корректная struct hostent *.
Прототипы
struct hostent *gethostbyname;
struct hostent *gethostbyaddr;
connect
connect Возвращает целое число, представляющее код ошибки: 0 означает успешное выполнение, а −1 свидетельствует об ошибке.
Некоторые типы сокетов работают без установления соединения, это в основном касается UDP-сокетов. Для них соединение приобретает особое значение: цель по умолчанию для посылки и получения данных присваивается переданному адресу, позволяя использовать такие функции как send и recv на сокетах без установления соединения.
Загруженный сервер может отвергнуть попытку соединения, поэтому в некоторых видах программ необходимо предусмотреть повторные попытки соединения.
Прототип
#include <sys/types.h>
#include <sys/socket.h>
int connect;
bind
bind связывает сокет с конкретным адресом. Когда сокет создается при помощи socket , он ассоциируется с некоторым семейством адресов, но не с конкретным адресом. До того как сокет сможет принять входящие соединения, он должен быть связан с адресом. bind принимает три аргумента:
sockfd дескриптор, представляющий сокет при привязке
serv_addr указатель на структуру sockaddr , представляющую адрес, к которому привязываем.
addrlen поле socklen_t , представляющее длину структуры sockaddr .
Возвращает 0 при успехе и −1 при возникновении ошибки.
Прототип
#include <sys/types.h>
#include <sys/socket.h>
int bind;
listen
listen подготавливает привязываемый сокет к принятию входящих соединений. Данная функция применима только к типам сокетов SOCK_STREAM и SOCK_SEQPACKET . Принимает два аргумента:
sockfd корректный дескриптор сокета.
backlog целое число, означающее число установленных соединений, которые могут быть обработаны в любой момент времени. Операционная система обычно ставит его равным максимальному значению.
После принятия соединения оно выводится из очереди. В случае успеха возвращается 0, в случае возникновения ошибки возвращается −1.
Прототип
#include <sys/socket.h>
int listen;
accept
accept используется для принятия запроса на установление соединения от удаленного хоста. Принимает следующие аргументы:
sockfd дескриптор слушающего сокета на принятие соединения.
cliaddr указатель на структуру sockaddr , для принятия информации об адресе клиента.
addrlen указатель на socklen_t , определяющее размер структуры, содержащей клиентский адрес и переданной в accept . Когда accept возвращает некоторое значение, socklen_t указывает сколько байт структуры cliaddr использовано в данный момент.
Функция возвращает дескриптор сокета, связанный с принятым соединением, или −1 в случае возникновения ошибки.
Прототип
#include <sys/types.h>
#include <sys/socket.h>
int accept;
Просмотров: 8625
|