UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Исходящий и входящий интерфейсы
Интерфейсы на узле IPv6 идентифицируются небольшими целыми положительными числами, как мы сказали в разделе 18.6. Вспомните, что ни одному интерфейсу не может быть присвоен нулевой индекс. При задании исходящего интерфейса ядро само выберет исходящий интерфейс, если значение
ipi6_ifindex
IPV6_MULTICAST_IF
Адрес отправителя и адрес получателя IPv6
IPv6-адрес отправителя обычно определяется при помощи функции
bind
Когда IPv6-адрес отправителя задан в качестве вспомогательных данных и элемент
ipi6_addr
in6_pktinfo
IN6ADDR_ANY_INIT
ipi6_addr
ipi6_addr
Когда структура in6_
pktinfo
recvmsg
ipi6_addr
IP_RECVDSTADDR
Задание и получение предельного количества транзитных узлов
Предельное количество транзитных узлов обычно задается параметром сокета
IPV6_UNICAST_HOPS
IPV6_MULTICAST_HOPS
traceroute
Полученное предельное количество транзитных узлов возвращается в виде вспомогательных данных функцией
recvmsg
IPV6_RECVHOPLIMIT
cmsghdr
cmsg_level
IPPROTO_IPV6
cmsg_type
IPV6_HOPLIMIT
getsockopt
IPV6_UNICAST_HOPS
Чтобы задать предельное количество транзитных узлов для исходящих пакетов, никаких специальных действий не требуется — нам нужно только указать управляющую информацию в виде вспомогательных данных для функции
sendmsg
Предельное количество транзитных узлов не содержится в структуре in6_pktinfo — некоторые серверы UDP хотят отвечать на запросы клиентов, посылая ответы на том же интерфейсе, на котором был получен запрос, с совпадением IPv6-адреса отправителя ответа и IPv6-адреса получателя запроса. Для этого приложение может включить параметр сокета IPV6_RECVPKTINFO, а затем использовать полученную управляющую информацию из функции recvmsg в качестве управляющей информации для функции sendmsg при отправке ответа. Приложению вообще никак не нужно проверять или изменять структуру in6_pktinfo. Но если в этой структуре содержался бы предел количества транзитных узлов, приложение должно было бы проанализировать полученную управляющую информацию и изменить значение этого предела, поскольку полученный предел не является желательным значением для исходящего пакета.
Задание адреса следующего транзитного узла
Объект вспомогательных данных
IPV6_NEXTHOP
cmsghdr
cmsg_level
IPPROTO_IPV6
cmsg_type
IPV6_NEXTHOP
На рис. 22.5 мы показали пример такого объекта вспомогательных данных, считая, что структура адреса сокета — это 24-байтовая структура
sockaddr_in6
SO_DONTROUTE
IPV6_NEXTHOP
sockaddr_in6
Задание и получение класса трафика
Объект вспомогательных данных
IPV6_TCLASS
cmsg_level
cmsghdr
IPPROTO_IPV6
cmsg_type
IPV6_TCLASS
DSCP
ECN
ECN
ECN
IPV6_TCLASS