The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
Дальше: 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



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру