Дальше: 2 Структура sockaddr_in Вверх: socket Назад: Введение

1 Сокеты

Для хранения информации о сокете существует стандартная структура: struct sockaddr { sa_family_t sa_family; char sa_data[]; };

На практике, в зависимости от используемого сетевого протокола, используются другие структуры. Сокеты для использования с протоколом IP определены следующим образом: struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; };

Структура in_addr определена следующим образом: struct in_addr { in_addr_t s_addr; }; где in_addr_t это целый беззнаковый тип длиной 32 бита.

Сокеты создаются при помощи системного вызова socket: int socket(int domain, int type, int protocol);

Аргументы функции socket имеют следующее значение:

domain
определяет коммуникационный домен. Для использования протоколов стека TCP/IP следует присвоить этому параметру значение AF_INET.

type
определяет тип создаваемого сокета. Значение SOCK_STREAM указывается при создании сокета работающего в режиме соединения, значение SOCK_DGRAM указывается при создании сокета работающего в датаграммном режиме.

protocol
определяет используемый протокол. Обычно этот параметр задается равным нулю, при этом используется протокол принятый по умолчанию для данного типа сокетов (TCP для сокетов типа SOCK_STREAM и UDP для сокетов типа SOCK_DGRAM).

Функция socket возвращает дескриптор файла сокета, используемый в дальнейшем для работы с сокетом. В случае возникновения ошибки функция возвращает значение -1.

Функция socket создает "безымянный" сокет, т.е. не связанный ни с локальным адресом, ни с номером порта. Связать сокет с адресом компьютера и номером порта можно при помощи функции bind: int bind(int socket, const struct sockaddr *address, socklen_t address_len}

Аргументы функции bind:

socket
является дескриптором файла сокета, который будет связан с адресом.
address
указывает на структуру в которой хранится информация о сокете. Длина и формат структуры зависят от используемого семейства сетевых протоколов. В случае использования протокола IP, это структура типа sockaddr_in.
address_len
содержит размер структуры address.

Если вызов функции bind завершается успешно, то возвращаемое значение равно нулю. В случае возникновения ошибки возвращается значение -1. Код ошибки содержится в переменной errno.



Zwon
2002-03-24