UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
struct ip_mreq_source { struct in_addr imr_multiaddr; /* IPv4-адрес многоадресной передачи класса D */ struct in_addr imr_sourceaddr; /* IPv4-адрес источника */ struct in_addr imr_interface; /* IPv4-адрес локального интерфейса */};struct group_source_req { unsigned int gsr_interface; /* индекс интерфейса или 0 */ struct sockaddr_storage gsr_group; /* адрес многоадресной передачи IPv4 или IPv6 */ struct sockaddr_storage gsr_source; /* адрес источника IPv4 или IPv6 */};Если локальный интерфейс задается как универсальный адрес (
INADDR_ANYЗапрос на блокирование источника действует только для присоединенных групп, то есть таких, которые уже были присоединены к указанному интерфейсу параметром
IP_ADD_MEMBERSHIPIPV6_JOIN_GROUPMCAST_JOIN_GROUP■
IP_UNBLOCK_SOURCEMCAST_UNBLOCK_SOURCEIP_BLOCK_SOURCEMCAST_BLOCK_SOURCEЕсли локальный интерфейс задается как универсальный адрес (
INADDR_ANY■
IP_ADD_SOURCE_MEMBERSHIРMCAST_JOIN_SOURCE_GROUPIP_ADD_MEMBERSHIPIPV6_JOIN_GROUPMCAST_JOIN_GROUPЕсли локальный интерфейс задается как универсальный адрес (
INADDR_ANY■
IP_DROP_SOURCE_MEMBERSHIPMCAST_LEAVE_SOURCE_GROUPINADDR_ANYЕсли процесс присоединяется к группе источника, но не отключается от нее явно, отсоединение производится автоматически при закрытии сокета (явном или также автоматическом, при завершении процесса). Несколько процессов узла могут присоединиться к одной и той же группе источника, в случае чего узел остается в группе до тех пор, пока из нее не выйдет последний процесс.
■
IP_MULTICAST_IFIPV6_MULTICAST_IFin_addrINADDR_ANYБудьте внимательны, четко различая локальный интерфейс, заданный (или выбранный), когда процесс присоединяется к группе (интерфейс для получения приходящих дейтаграмм многоадресной передачи), и локальный интерфейс, заданный (или выбранный) для исходящих дейтаграмм.
Беркли-ядра выбирают интерфейс для исходящих дейтаграмм многоадресной передачи по умолчанию при помощи обычной таблицы маршрутизации IP. В ней выполняется поиск маршрута к групповому адресу получателя, после чего используется соответствующий интерфейс. Это та же технология, что используется для выбора принимающего интерфейса, если процесс не задает его в процессе присоединения к группе. При этом считается, что если для данного адреса многоадресной передачи существует маршрут (возможно, маршрут, заданный по умолчанию в таблице маршрутизации), то соответствующий интерфейс должен использоваться для ввода и вывода.
■
IP_MULTICAST_TTLIPV6_MULTICAST_HOPS■
IP_MULTICAST_LOOPIPV6_MULTICAST_LOOPЭто аналогично широковещательной передаче, где мы видели, что широковещательные сообщения, посылаемые на узле, также обрабатываются на нем, как полученные дейтаграммы (см. рис. 20.3). (Но в случае широковещательной передачи нет возможности отключить закольцовку.) Это значит, что если процесс входит в ту группу, которой он отправляет дейтаграммы, он будет получать свои собственные передачи.
Описываемая здесь закольцовка является внутренней и выполняется на уровне IP или выше. Если интерфейс получает копии своих передач, RFC 1112 [26] требует, чтобы драйвер игнорировал эти копии. В этом документе также утверждается, что параметр закольцовки по умолчанию включен «в целях оптимизации производительности для протоколов верхнего уровня, которые ограничивают членство в группе до одного процесса на узел (например, маршрутизирующих протоколов)».
Первые шесть пар параметров сокетов (
ADD_MEMBERSHIP/JOIN_GROUPDROP_MEMBERSHIP/LEAVE_GROUPBLOCK_SOURCEUNBLOCK_SOURCEADD_SOURCE_MEMBERSHIP/JOIN_SOURCE_GROUPDROP_SOURCE_MEMBERSHIP/LEAVE_SOURCE_GROUP
