Перевод сокета в пассивный режим
В сервере, использующем протокол TCP, для перевода сокета в пассивный режим применяется вызов процедуры listen. Процедура listen принимает также параметр с указанием длины внутренней очереди запросов для сокета. Очередь запросов содержит ряд входящих запросов на установление соединения TCP от клиентов, которые потребовали подключения к серверу.
8.17. Прием входящих запросов на установление соединения и их использование
В сервере, использующем протокол TCP для получения следующего входящего запроса на установление соединения (т.е. извлечения его из очереди запросов), вызывается процедура accept. В результате этого вызова возвращается дескриптор сокета, который будет использоваться для нового соединения. После приема запроса на установление нового соединения сервер использует процедуру recv (или read) для получения от клиента запросов прикладного протокола и процедуру send (или write) для передачи ответов. И наконец, после завершения работы с этим соединением сервер вызывает процедуру close для освобождения сокета.
8.18. Алгоритм последовательного сервера без установления логического соединения
Напомним, что последовательные серверы в наибольшей степени подходят для создания служб, характеризующихся минимальными затратами времени на обработку запроса. Такие транспортные протоколы с установлением логического соединения, как TCP, имеют более высокие издержки по сравнению с транспортными протоколами без установления логического соединения, например, с UDP, поэтому в большинстве последовательных серверов используется транспортный протокол без установления логического соединения. В алгоритме 8.2 приведен общий алгоритм работы последовательного сервера, в котором применяется протокол UDP.
Создание сокета для последовательного сервера без установления логического соединения осуществляется таким же образом, как и для сервера с установлением логического соединения. Сокет сервера остается неподключенным и может принимать входящие дейтаграммы от любого клиента. Для последовательной обработки запросов (дейтаграмм), полученных от клиентов, применяется один поток.
Алгоритм 8.2. Последовательный сервер без установления логического соединения
- Создать сокет и установить связь с общепринятым адресом предоставляемой службы.
- Считывать в цикле запросы от клиента, формировать ответы и отправлять клиенту в соответствии с прикладным протоколом.