Операционные системы. Учебное пособие. Марапулец Ю.В. - 192 стр.

UptoLike

Составители: 

bind(s, sockaddr, sockaddrlen);
где s - дескриптор узла, возвращаемый функцией socket;
sockaddr - структура, которая интерпретируется поддерживаемым протоколом (IP - ад-
рес, порта и т.д.);
sockaddrlen - размер параметра sockaddr в байтах.
Рассмотрим структуру sockaddr более подробно:
struct sockaddr
{
u_short sa_family;
char sa_data[14];
};
Первый элемент структуры обозначает протокол, второй - специфическое для про-
токола значение. Например версия данной структуры для Internet (sockaddr_in) будет
иметь следующий вид:
struct sockaddr_in
{
short sin_family; //AF_INET
u_short sin_port;
struct sin_addr; //4-х байтовый IP-адрес
char sin_zero[8];
};
Элемент sin_addr представляет собой четырехбайтовый IP-адрес (например 127.0.0.1).
Для преобразования данной строки в требуемую форму используется функция
inet_addr(), которая будет рассмотрена далее.
Для установления связи со стороны клиента используется функция connect:
error = connect(s, serveraddr, serveraddrlen);
которая инициирует установление связи на узле, используя его дескриптор s и информа-
цию из структуры serveraddr, которая содержит адрес сервера и номер порта на который
надо установить связь. Если гнездо не было связано с адресом, connect автоматически
вызовет системную функцию bind.
Функция connect возвращает 0, если вызов прошел успешно. Возвращенная вели-
чина -1 указывает на то, что в процессе установления связи произошла некая ошибка. В
случае успешного вызова функции процесс может работать с дескриптором узла, ис-
пользуя функции read и write, и закрывать канал используя функцию close.
Со стороны сервера процесс установления связи сложнее. Когда сервер желает
предложить один из своих сервисов, он связывает узел с общеизвестным адресом, ассо-
циирующимся с данным сервисом, и пассивно слушает этот узел. Для этих целей ис-
пользуется системный вызов listen:
error = listen(s, qlength);
где s это дескриптор узла, а qlength это максимальное количество запросов на установ-
ление связи, которые могут стоять в очереди, ожидая обработки сервером; это количест-
во может быть ограничено особенностями системы.
194
bind(s, sockaddr, sockaddrlen);

где s - дескриптор узла, возвращаемый функцией socket;
sockaddr - структура, которая интерпретируется поддерживаемым протоколом (IP - ад-
рес, № порта и т.д.);
sockaddrlen - размер параметра sockaddr в байтах.
      Рассмотрим структуру sockaddr более подробно:

struct sockaddr
{
        u_short sa_family;
        char sa_data[14];
};

     Первый элемент структуры обозначает протокол, второй - специфическое для про-
токола значение. Например версия данной структуры для Internet (sockaddr_in) будет
иметь следующий вид:

struct sockaddr_in
{
        short sin_family; //AF_INET
        u_short sin_port;
        struct sin_addr; //4-х байтовый IP-адрес
        char sin_zero[8];
};

Элемент sin_addr представляет собой четырехбайтовый IP-адрес (например 127.0.0.1).
Для преобразования данной строки в требуемую форму используется функция
inet_addr(), которая будет рассмотрена далее.
      Для установления связи со стороны клиента используется функция connect:

error = connect(s, serveraddr, serveraddrlen);

которая инициирует установление связи на узле, используя его дескриптор s и информа-
цию из структуры serveraddr, которая содержит адрес сервера и номер порта на который
надо установить связь. Если гнездо не было связано с адресом, connect автоматически
вызовет системную функцию bind.
     Функция connect возвращает 0, если вызов прошел успешно. Возвращенная вели-
чина -1 указывает на то, что в процессе установления связи произошла некая ошибка. В
случае успешного вызова функции процесс может работать с дескриптором узла, ис-
пользуя функции read и write, и закрывать канал используя функцию close.
     Со стороны сервера процесс установления связи сложнее. Когда сервер желает
предложить один из своих сервисов, он связывает узел с общеизвестным адресом, ассо-
циирующимся с данным сервисом, и пассивно слушает этот узел. Для этих целей ис-
пользуется системный вызов listen:

error = listen(s, qlength);

где s это дескриптор узла, а qlength это максимальное количество запросов на установ-
ление связи, которые могут стоять в очереди, ожидая обработки сервером; это количест-
во может быть ограничено особенностями системы.


                                                 194