UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
29 inet6_srcrt_print(CMSG_DATA(cmsg));30 Inet6_rth_reverse(CMSG_DATA(cmsg), CMSG_DATA(cmsg));31 }32 }33 iov[0].iov_len = n;34 Sendmsg(sockfd, &msg, 0);35 }36 }12-13IPV6_RECVRTHDRrecvmsgmsghdr21-24recvmsg25-32CMSG_FIRSTHDRCMSG_NXTHDRinet6_srcrt_printinet6_rth_reverse33-34sendmsgБлагодаря наличию вспомогательных библиотечных функций IPv6 наша функция
inet6_srcrt_printЛистинг 27.7. Функция inet6_srcrt_print: вывод маршрута
1 #include "unp.h" 2 void 3 inet6_srcrt_print(void *ptr) 4 { 5 int i, segments; 6 char str[INET6_ADDRSTRLEN]; 7 segments = Inet6_rth_segments(ptr); 8 printf("received source route: "); 9 for (i = 0; i < segments; i++)10 printf("%s ", Inet_ntop(AF_INET6, Inet6_rth_getaddr(ptr, i),11 str, sizeof(str)));12 printf("n");13 }7inet6_rth_segments9-11inet6_rth_getaddrinet_ntopКлиенту и серверу, работающим с маршрутами IPv6, не нужно ничего знать о формате этих маршрутов внутри пакета. Библиотечные функции интерфейса скрывают детали форматирования, но не мешают нам программировать с той же гибкостью, которая была в IPv4, где параметры нужно было строить вручную.
27.7. «Закрепленные» параметры IPv6
Мы рассмотрели использование вспомогательных данных с функциями
sendmsgrecvmsg1. Информация о пакете IPv6: структура
in6_pktinfo2. Предельное количество транзитных узлов для исходящих или приходящих дейтаграмм (см. рис. 22.5).
3. Адрес следующего транзитного узла (см. рис. 22.5).
4. Класс исходящего или входящего трафика (см. рис. 22.5).
5. Параметры транзитных узлов (см. рис. 27.6).
6. Параметры получателя (см. рис. 27.6).
7. Заголовок маршрутизации (см. рис. 27.8).
В табл. 14.4 приведены значения полей
cmsg_levelcmsg_typeВместо того чтобы отсылать эти параметры при каждом вызове функции
sendmsgIPPROTO_IPV6IPV6_DSTOPTSIPV6_HOPLIMITIPV6_HOPOPTSIPV6_NEXTHOPIPV6_PKTINFOIPV6_RTHDRIPV6_TCLASSsendmsgsendmsgКонцепция закрепленных параметров также может быть использована и в случае TCP, поскольку вспомогательные данные никогда не отсылаются и не принимаются с помощью функций
sendmsgrecvmsgНе существует способа получить параметры, принятые в IP-пакете по TCP, потому что в этом протоколе отсутствует соответствие между пакетами и операциями чтения из сокета, выполняемыми пользователем.
