Материал для дальнейшего изучения
10.8. Резюме
Последовательный сервер с установлением логического соединения выполняет один проход по циклу при обработке каждого соединения. Сервер остается заблокированным в вызове функции accept до момента поступления запроса на установление соединения от клиента. Как только программное обеспечение базового протокола установит новое соединение и создаст новый сокет, вызов функции accept возвращает дескриптор сокета и сервер получает возможность продолжить выполнение. Парнер www.casadelux.ru/plitka.html
Как было отмечено в главе 7, в протоколе DAYTIME для активизации действий сервера по формированию и передаче ответа используется сам факт появления запроса на установление соединения. Клиент не должен передавать запрос, поскольку сервер отвечает сразу после обнаружения нового запроса на установление соединения. Для формирования ответа сервер получает текущее значение времени от операционной системы, представляет эту информацию в виде строки, подходящей для восприятия человеком, а затем возвращает ответ клиенту. В этом примере сервера сокет, соответствующий отдельному соединению, закрывается после передачи ответа. В таком случае принцип организации взаимодействия, предусматривающий немедленное закрытие соединения, вполне приемлем, т.к. служба DAYTIME допускает передачу только одного ответа для каждого соединения. Серверы, позволяющие передавать несколько запросов через одно соединение, должны ждать, пока клиент не закроет соединение.
Упражнения
- 10.1. Должен ли процесс иметь особые привилегии для вызова на выполнение сервера DAYTIME на локальном компьютере? Должен ли он иметь особые привилегии для вызова на выполнение клиента DAYTIME?
- 10.2. Каково основное преимущество использования для активизации ответа от сервера самого факта появления запроса на установление соединения? В чем состоит основной недостаток?
- 10.3. Некоторые серверы DAYTIME передают в конце строки текста сочетание двух символов: символа возврата каретки (CR — Carriage Return) и перевода строки (LF — LineFeed). Откорректируйте пример серверной программы, чтобы в ней в конце строки передавались символы CR-LF, а не просто символ LF. Какими символами должны оканчиваться строки согласно стандарту протокола DAYTIME?
- 10.4. Программное обеспечение TCP обычно распределяет очередь постоянной длины для дополнительных запросов на установление соединения, поступающих в то время, пока сервер занят, и позволяет серверу устанавливать размер очереди во время вызова функции listen. Какова длина очереди, предоставляемой программным обеспечением TCP вашего компьютера? Какая длина очереди может быть указана сервером при вызове функции listen?
- 10.5. Откорректируйте пример кода сервера, приведенный в файле TCPdaytimed.c, таким образом, чтобы он явно не закрывал соединение после передачи ответа. Будет ли эта программа по-прежнему работать правильно? Объясните ваш ответ.
- 10.6. Сравните сервер с установлением логического соединения, который после передачи ответа явно закрывает каждое соединение, с сервером, позволяющим клиенту держать соединение открытым неопределенно долгое время перед его закрытием. Каковы преимущества и недостатки каждого из этих подходов?
- 10.7. Предположим, что в программном обеспечении TCP используется тайм-аут соединения, равный 4 минутам (т.е. в нем в течение 4 минут хранится информация о соединении после закрытия). Если сервер DAYTIME работает в системе, имеющей 100 записей для регистрации информации о соединении TCP, то какова максимальная скорость, с которой сервер может обрабатывать запросы без исчерпания числа доступных записей?