UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Сервер, показанный в листинге 1.5, называется последовательным сервером (iterative server), поскольку он обслуживает клиентов последовательно, по одному клиенту за один раз. Существует несколько технологий написания параллельного сервера (concurrent server), который обслуживает множество клиентов одновременно. Самой простой технологией является вызов функции Unix
fork
fork
■ Запуская такой сервер из командной строки, мы обычно рассчитываем, что он будет работать достаточно долго, поскольку часто серверы работают, пока работает система. Поэтому мы должны модифицировать код сервера таким образом, чтобы он корректно работал как демон (daemon) Unix, то есть процесс, функционирующий в фоновом режиме без подключения к терминалу. Это решение подробно описано в разделе 13.4.
1.6. Таблица соответствия примеров технологии клиент-сервер
Технологии сетевого программирования иллюстрируются в этой книге на двух основных примерах:
■ клиент-сервер времени и даты (описание которого мы начали в листингах 1.1, 1.2 и 1.5), и
■ эхо-клиент-сервер (который появится в главе 5).
Чтобы обеспечить удобный поиск различных тем, которых мы касаемся в этой книге, мы объединили разработанные нами программы и сопроводили их номерами листингов, в которых приведен исходный код. В табл. 1.1 перечислены версии клиента времени и даты (две из них мы уже видели). В табл. 1.2 перечисляются версии сервера времени и даты. В табл. 1.3 представлены версии эхо-клиента, а в табл. 1.4 — версии эхо-сервера.
Таблица 1.1. Различные версии клиента времени и даты
Листинг | Описание |
---|---|
1.1 | TCP/Ipv4, зависимый от протокола |
1.2 | TCP/Ipv6, зависимый от протокола |
11.2 | TCP/Ipv4, зависимый от протокола, вызывает функции gethostbyname и getservbyname |
11.5 | TCP, независимый от протокола, вызывает функции getaddrinfo и tcp_connect |
11.10 | UDP, независимый от протокола, вызывает функции getaddrinfo и udp_connect |
16.7 | TCP, использует неблокирующую функцию connect |
31.2 | TCP/IPv4, зависимый от протокола |
Д.1 | TCP, зависимый от протокола, генерирует SIGPIPE |
Д.2 | TCP, зависимый от протокола, печатает размер буфера сокета и MSS |
Д.5 | TCP, зависимый от протокола, допускает использование имени узла (функция gethostbyname) или IP-адреса |
Д.6 | TCP, независимый от протокола, допускает использование имени узла (функция gethostbyname). |
Таблица 1.2. Различные версии сервера времени и даты, рассматриваемые в данной книге
Листинг | Описание |
---|---|
1.5 | TCP/IPv4, зависимый от протокола |
11.7 | TCP, независимый от протокола, вызывает getaddrinfo и tcp_listen |
11.8 | TCP, независимый от протокола, вызывает getaddrinfo и tcp_listen |
11.13 | UDP, независимый от протокола, вызывает getaddrinfo и udp_server |
13.2 | TCP, независимый от протокола, выполняется как автономный демон |
13.4 | TCP, независимый от протокола, порожденный демоном inetd |
Таблица 1.3. Различные версии эхо-клиента, рассматриваемые в данной книге
Листинг | Описание |
---|---|
5.3 | TCP/IPv4, зависимый от протокола |
6.1 | TCP, использует функцию select |
6.2 | TCP, использует функцию select и работает в пакетном режиме |
8.3 | UDP/IPv4, зависимый от протокола |
8.5 | UDP, проверяет адрес сервера |
8.7 | UDP, вызывает функцию connect для получения асинхронных ошибок |
14.2 | UDP, тайм-аут при чтении ответа сервера с использованием сигнала SIGALRM |
14.4 | UDP, тайм-аут при чтении ответа сервера с использованием функции select |
14.5 | UDP, тайм-аут при чтении ответа сервера с использованием опции сокета SO_RCVTIMEO |
14.7 | TCP, использует интерфейс /dev/poll |
14.8 | TCP, использует интерфейс kqueue |
15.4 | Поток домена Unix, зависит от протокола |
15.6 | Дейтаграмма домена Unix, зависит от протокола |
16.1 | TCP, использует неблокируемый ввод-вывод |
16.6 | TCP, использует два процесса (функцию fork) |
16.14 | TCP, устанавливает соединение, затем посылает пакет RST |
20.1 | UDP, широковещательный, ситуация гонок |
20.2 | UDP, широковещательный, ситуация гонок |
20.3 | UDP, широковещательный, для устранения ситуации гонок используется функция pselect |
20.5 | UDP, широковещательный, для устранения ситуации гонок используются функции sigsetjmp и siglongmp |
20.6 | UDP, широковещательный, для устранения ситуации гонок в обработчике сигнала используется IPC |
22.4 | UDP, увеличение надежности протокола за счет применения повторной передачи, тайм-аутов и порядковых номеров |
26.1 | TCP, использование двух потоков |
27.4 | TCP/IPv4, задание маршрута от отправителя |
27.5 | UDP/IPv6, задание маршрута от отправителя |