UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
22 }23 }24 }9-13SCTP_COMM_UPSCTP_RESTART14-17sctp_getpaddrssctp_print_addressessctp_getpaddrssctp_freepaddrs18-21sctp_getladdrssctp_freeladdrsПоследняя из новых функций называется
sctp_print_addressessctp_getpaddrssctp_getladdrsЛистинг 23.12. Вывод списка адресов
//sctp/sctp_print_addrs.c 1 #include "unp.h" 2 void 3 sctp_print_addresses(struct sockaddr_storage *addrs, int num) 4 { 5 struct sockaddr_storage *ss; 6 int i, salen; 7 ss = addrs; 8 for (i=0; i<num; i++){ 9 printf("%sn", Sock_ntop((SA*)ss, salen));10 #ifdef HAVE_SOCKADDR_SA_LEN11 salen = ss->ss_len;12 #else13 swilch (ss->ss_family) {14 case AF_INET:15 salen = sizeof(struct sockaddr_in);16 break;17 #ifdef IPV618 case AF_INET6:19 salen = sizeof(struct sockaddr_in6);20 break;21 #endif22 default:23 err_auit("sctp_print_addresses: unknown AF");24 break;25 }26 #endif27 ss = (struct sockaddr_storage*)((char*)ss + salen);28 }29 }7-89sock_ntop10-26ockaddr_storagesockaddr_storagesockaddr_storage27Выполнение программы
Результат взаимодействия модифицированного клиента с сервером представлен ниже.
FreeBSD-lap: <b>./sctpclient01 10.1.1.5</b><b>[0]Hi</b>There are 2 remote addresses and they are:10.1.1.5:9877127.0.0.1:9877There are 2 local addresses and they are:10.1.1.5:1025127.0.0.1:1025From str:0 seq:0 (assoc:c99e2680):[0]Hi<b>Control-D</b>FreeBSD-lap:23.8. Определение идентификатора ассоциации по IP-адресу
Модифицированный клиент из раздела 23.7 использовал уведомления в качестве сигнала для получения списков адресов. Это было достаточно удобно, поскольку идентификатор ассоциации, для которой требовалось получить адреса, содержался в уведомлении в поле
sac_assoc_idЛистинг 23.13. Преобразование адреса в идентификатор ассоциации
//sctp/sctp_addr_to_associd.с 1 #include "unp.h" 2 sctp_assoc_t 3 sctp_address_to_associd(int sock_fd, struct sockaddr *sa, socklen_t salen)
