Рудофф Эндрю М. - UNIX: разработка сетевых приложений. 3-е изд. стр 7.

Шрифт
Фон

Сервер, показанный в листинге 1.5, называется последовательным сервером ( iterative server ), поскольку он обслуживает клиентов последовательно, по одному клиенту за один раз. Существует несколько технологий написания параллельного сервера ( concurrent server ), который обслуживает множество клиентов одновременно. Самой простой технологией является вызов функции Unix fork(раздел 4.7), когда создается по одному дочернему процессу для каждого клиента. Другой способ использование программных потоков (threads) вместо функции fork(раздел 26.4) или предварительное порождение фиксированного количества дочерних процессов с помощью функции fork в начале работы (раздел 30.6).

Запуская такой сервер из командной строки, мы обычно рассчитываем, что он будет работать достаточно долго, поскольку часто серверы работают, пока работает система. Поэтому мы должны модифицировать код сервера таким образом, чтобы он корректно работал как демон ( daemon ) Unix, то есть процесс, функционирующий в фоновом режиме без подключения к терминалу. Это решение подробно описано в разделе 13.4.

1.6. Таблица соответствия примеров технологии клиент-сервер

клиент-сервер времени и даты (описание которого мы начали в листингах 1.1, 1.2 и 1.5), и

эхо-клиент-сервер (который появится в главе 5).

Чтобы обеспечить удобный поиск различных тем, которых мы касаемся в этой книге, мы объединили разработанные нами программы и сопроводили их номерами листингов, в которых приведен исходный код. В табл. 1.1 перечислены версии клиента времени и даты (две из них мы уже видели). В табл. 1.2 перечисляются версии сервера времени и даты. В табл. 1.3 представлены версии эхо-клиента, а в табл. 1.4 версии эхо-сервера.

Таблица 1.1. Различные версии клиента времени и даты

ЛистингОписание
1.1TCP/Ipv4, зависимый от протокола
1.2TCP/Ipv6, зависимый от протокола
11.2TCP/Ipv4, зависимый от протокола, вызывает функции gethostbyname и getservbyname
11.5TCP, независимый от протокола, вызывает функции getaddrinfo и tcp_connect
11.10UDP, независимый от протокола, вызывает функции getaddrinfo и udp_connect
16.7TCP, использует неблокирующую функцию connect
31.2TCP/IPv4, зависимый от протокола
Д.1TCP, зависимый от протокола, генерирует SIGPIPE
Д.2TCP, зависимый от протокола, печатает размер буфера сокета и MSS
Д.5TCP, зависимый от протокола, допускает использование имени узла (функция gethostbyname) или IP-адреса
Д.6TCP, независимый от протокола, допускает использование имени узла (функция gethostbyname).

Таблица 1.2. Различные версии сервера времени и даты, рассматриваемые в данной книге

ЛистингОписание
1.5TCP/IPv4, зависимый от протокола
11.7TCP, независимый от протокола, вызывает getaddrinfo и tcp_listen
11.8TCP, независимый от протокола, вызывает getaddrinfo и tcp_listen
11.13UDP, независимый от протокола, вызывает getaddrinfo и udp_server
13.2TCP, независимый от протокола, выполняется как автономный демон
13.4TCP, независимый от протокола, порожденный демоном inetd
Таблица 1.3. Различные версии эхо-клиента, рассматриваемые в данной книге

ЛистингОписание
5.3TCP/IPv4, зависимый от протокола
6.1TCP, использует функцию select
6.2TCP, использует функцию select и работает в пакетном режиме
8.3UDP/IPv4, зависимый от протокола
8.5UDP, проверяет адрес сервера
8.7UDP, вызывает функцию connect для получения асинхронных ошибок
14.2UDP, тайм-аут при чтении ответа сервера с использованием сигнала SIGALRM
14.4UDP, тайм-аут при чтении ответа сервера с использованием функции select
14.5UDP, тайм-аут при чтении ответа сервера с использованием опции сокета SO_RCVTIMEO
14.7TCP, использует интерфейс /dev/poll
14.8TCP, использует интерфейс kqueue
15.4Поток домена Unix, зависит от протокола
15.6Дейтаграмма домена Unix, зависит от протокола
16.1TCP, использует неблокируемый ввод-вывод
16.6TCP, использует два процесса (функцию fork)
16.14TCP, устанавливает соединение, затем посылает пакет RST
20.1UDP, широковещательный, ситуация гонок
20.2UDP, широковещательный, ситуация гонок
20.3UDP, широковещательный, для устранения ситуации гонок используется функция pselect
20.5UDP, широковещательный, для устранения ситуации гонок используются функции sigsetjmp и siglongmp
20.6UDP, широковещательный, для устранения ситуации гонок в обработчике сигнала используется IPC
22.4UDP, увеличение надежности протокола за счет применения повторной передачи, тайм-аутов и порядковых номеров
26.1TCP, использование двух потоков
27.4TCP/IPv4, задание маршрута от отправителя
27.5UDP/IPv6, задание маршрута от отправителя

Таблица 1.4. Различные версии эхо-сервера, рассматриваемые в данной книге

ЛистингОписание
5.1TCP/IPv4, зависимый от протокола
5.9TCP/IPv4, зависимый от протокола, корректно обрабатывает завершение всех дочерних процессов
6.3TCP/IPv4, зависимый от протокола, использует функцию select, один процесс обрабатывает всех клиентов
6.5TCP/IPv4, зависимый от протокола, использует функцию poll, один процесс обрабатывает всех клиентов
8.1UDP/IPv4, зависимый от протокола
8.14TCP и UDP/IPv4, зависимый от протокола, использует функцию select
14.6TCP, использует стандартный ввод-вывод
15.3Доменный сокет Unix, зависимый от протокола
15.5Дейтаграмма домена Unix, зависит от протокола
15.13Доменный сокет Unix, с передачей данных, идентифицирующих клиента
22.3UDP, печатает полученный IP-адрес назначения и имя полученного интерфейса, обрезает дейтаграммы
22.13UDP, связывает все адреса интерфейсов
25.2UDP, использование модели ввода-вывода, управляемого сигналом
26.2TCP, один поток на каждого клиента
26.3TCP, один поток на каждого клиента, машинонезависимая (переносимая) передача аргумента
27.4TCP/IPv4, печатает полученный маршрут от отправителя
27.6UDP/IPv4, печатает полученный маршрут от отправителя и обращает его
28.21UDP, использует функцию icmpd для получения асинхронных ошибок
Д.9UDP, связывает все адреса интерфейсов

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Похожие книги