Управление сценариями просмотра Web-страниц

Установление связи


Со стороны клиента связь устанавливается с помощью стандартной функции
connect:

error = connect(s, serveraddr, serveraddrlen);

которая инициирует установление связи на сокете, используя дескриптор сокета s
и информацию из структуры serveraddr, имеющей тип sockaddr_in, которая
содержит адрес сервера и номер порта на который надо установить связь. Если
сокет не был связан с адресом, connect автоматически вызовет системную функцию
bind.

Connect возвращает 0, если вызов прошел успешно. Возвращенная величина -1
указывает на то, что в процессе установления связи произошла некая ошибка. В


случае успешного вызова функции процесс может работать с дескриптором сокета,
используя функции read и write, и закрывать канал используя функцию close.

Со стороны сервера процесс установления связи сложнее.
Когда сервер желает предложить один из своих сервисов, он связывает сокет с
общеизвестным адресом, ассоциирующимся с данным сервисом, и пассивно
слушает этот сокет. Для этих целей используется системный вызов listen:

error = listen(s, qlength);

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

Когда сервер получает запрос от клиента и принимает решение об
установлении связи, он создает новый сокет и связывает его с ассоциацией,
эквивалентной 'слушающему сокету'. Для Internet домена это означает тот же
самый номер порта. Для этой цели используется системный вызов accept:

newsock = accept(s, clientaddr, clientaddrlen);

Сокет, ассоциированный клиентом, и сокет, который был возвращен
функцией accept, используются для установления связи между сервером и
клиентом.

Процесс установления связи показан на рисунке 1.



Рис. 1: Взаимодействие клиента и сервера





Содержание раздела