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_MEMBERSHIP
IPV6_JOIN_GROUP
MCAST_JOIN_GROUP
■
IP_UNBLOCK_SOURCE
MCAST_UNBLOCK_SOURCE
IP_BLOCK_SOURCE
MCAST_BLOCK_SOURCE
Если локальный интерфейс задается как универсальный адрес (
INADDR_ANY
■
IP_ADD_SOURCE_MEMBERSHIР
MCAST_JOIN_SOURCE_GROUP
IP_ADD_MEMBERSHIP
IPV6_JOIN_GROUP
MCAST_JOIN_GROUP
Если локальный интерфейс задается как универсальный адрес (
INADDR_ANY
■
IP_DROP_SOURCE_MEMBERSHIP
MCAST_LEAVE_SOURCE_GROUP
INADDR_ANY
Если процесс присоединяется к группе источника, но не отключается от нее явно, отсоединение производится автоматически при закрытии сокета (явном или также автоматическом, при завершении процесса). Несколько процессов узла могут присоединиться к одной и той же группе источника, в случае чего узел остается в группе до тех пор, пока из нее не выйдет последний процесс.
■
IP_MULTICAST_IF
IPV6_MULTICAST_IF
in_addr
INADDR_ANY
Будьте внимательны, четко различая локальный интерфейс, заданный (или выбранный), когда процесс присоединяется к группе (интерфейс для получения приходящих дейтаграмм многоадресной передачи), и локальный интерфейс, заданный (или выбранный) для исходящих дейтаграмм.
Беркли-ядра выбирают интерфейс для исходящих дейтаграмм многоадресной передачи по умолчанию при помощи обычной таблицы маршрутизации IP. В ней выполняется поиск маршрута к групповому адресу получателя, после чего используется соответствующий интерфейс. Это та же технология, что используется для выбора принимающего интерфейса, если процесс не задает его в процессе присоединения к группе. При этом считается, что если для данного адреса многоадресной передачи существует маршрут (возможно, маршрут, заданный по умолчанию в таблице маршрутизации), то соответствующий интерфейс должен использоваться для ввода и вывода.
■
IP_MULTICAST_TTL
IPV6_MULTICAST_HOPS
■
IP_MULTICAST_LOOP
IPV6_MULTICAST_LOOP
Это аналогично широковещательной передаче, где мы видели, что широковещательные сообщения, посылаемые на узле, также обрабатываются на нем, как полученные дейтаграммы (см. рис. 20.3). (Но в случае широковещательной передачи нет возможности отключить закольцовку.) Это значит, что если процесс входит в ту группу, которой он отправляет дейтаграммы, он будет получать свои собственные передачи.
Описываемая здесь закольцовка является внутренней и выполняется на уровне IP или выше. Если интерфейс получает копии своих передач, RFC 1112 [26] требует, чтобы драйвер игнорировал эти копии. В этом документе также утверждается, что параметр закольцовки по умолчанию включен «в целях оптимизации производительности для протоколов верхнего уровня, которые ограничивают членство в группе до одного процесса на узел (например, маршрутизирующих протоколов)».
Первые шесть пар параметров сокетов (
ADD_MEMBERSHIP/JOIN_GROUP
DROP_MEMBERSHIP/LEAVE_GROUP
BLOCK_SOURCE
UNBLOCK_SOURCE
ADD_SOURCE_MEMBERSHIP/JOIN_SOURCE_GROUP
DROP_SOURCE_MEMBERSHIP/LEAVE_SOURCE_GROUP