UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Эти два параметра сокета и концепция тайм-аута сокетов вообще были добавлены в реализации 4.3BSD Reno.
В реализациях, происходящих от Беркли, указанные параметры инициализируют таймер отсутствия активности, а не абсолютный таймер системного вызова чтения или записи. На с. 496 и 516 [128] об этом рассказывается более подробно.
Параметры сокета SO_REUSEADDR и SO_REUSEPORT
Параметр сокета
SO_REUSEADDR1. Параметр
SO_REUSEADDRbind1) запускается прослушивающий сервер;
2) от клиента приходит запрос на соединение, и для обработки этого клиента генерируется дочерний процесс;
3) прослушивающий сервер завершает работу, но дочерний процесс продолжает обслуживание клиента на существующем соединении;
4) прослушивающий сервер перезапускается.
По умолчанию, когда прослушивающий сервер перезапускается при помощи вызова функций
socketbindlistenbindSO_REUSEADDRsocketbindЭтот сценарий вызывает больше всего вопросов в Usenet.
2. Параметр
SO_REUSEADDRbindbindSO_REUSEADDRSO_REUSEADDRSO_REUSEADDRSO_REUSEADDRTCP не дает нам возможности запустить множество серверов, которые с помощью функции
bindSO_REUSEADDRПо соображениям безопасности некоторые операционные системы запрещают связывать несколько серверов с адресом подстановки, то есть описанный выше сценарий не работает даже с использованием параметра
SO_REUSEADDR3. Параметр
SO_REUSEADDRIP_RECVSTADDRgetsockname4. Параметр
SO_REUSEADDRbindЭто свойство применяется при многоадресной передаче для многократного выполнения одного и того же приложения на одном и том же узле. Когда приходит дейтаграмма UDP для одного из многократно связанных сокетов, действует следующее правило: если дейтаграмма предназначена либо для широковещательного адреса, либо для адреса многоадресной передачи, то одна копия дейтаграммы доставляется каждому сокету. Но если дейтаграмма предназначена для адреса направленной передачи, то дейтаграмма доставляется только на один сокет. Какой сокет получит дейтаграмму, если в случае направленной передачи существует множество сокетов, соответствующих дейтаграмме, — зависит от реализации. На с. 777-779 [128] об этом свойстве рассказывается более подробно. О широковещательной и многоадресной передаче мы поговорим соответственно в главах 20 и 21.
В упражнениях 7.5 и 7.6 показаны примеры использования этого параметра сокета.
Вместо того чтобы перегружать параметр
SO_REUSEADDRSO_REUSEPORT
