UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
22 exit(0);23 }2-3sap.mcast.nethttp://www.iana.org/assignments/multicast-addressesmcast.net12-17udp_client18-19SO_REUSEADDR20mcast_join21loopЛистинг 21.6. Цикл, получающий и выводящий анонсы SAP/SDP
//mysdr/loop.c 1 #include "mysdr.h" 2 void 3 loop(int sockfd, socklen_t salen) 4 { 5 socklen_t len; 6 ssize_t n; 7 char *p; 8 struct sockaddr *sa; 9 struct sap_packet {10 uint32_t sap_header;11 uint32_t sap_src;12 char sap_data[BUFFSIZE];13 } buf;14 sa = Malloc(salen);15 for (;;) {15 len = salen;17 n = Recvfrom(sockfd, &buf, sizeof(buf) - 1, 0, sa, &len);18 ((char *)&buf)[n] = 0; /* завершающий нуль */19 buf.sap_header = ntohl(buf.sap_header);20 printf("From %s hash 0х%0хn" Sock_ntop(sa, len),21 buf.sap_header & SAP_HASH_MASK);22 if (((buf.sap_header & SAP_VERSION_MASK) >> SAP_VERSION_SHIFT) > 1) {23 err_msg("... version field not 1 (0x%08x)", buf.sap_header);24 continue;25 }26 if (buf.sap_header & SAP_IPV6) {27 err_msg("... IPv6");28 continue;29 }30 if (buf.sap_header & (SAP_DELETE|SAP_ENCRYPTED|SAP_COMPRESSED)) {31 err_msg("... can't parse this packet type (0x%80x)",32 buf.sap_header);33 continue;34 }35 p = buf.sap_data + ((buf.sap_header & SAP AUTHLEN_MASK)36 >> SAP_AUTHLEN_SHIFT);37 if (strcmp(p.,"application/sdp") == 0)38 p += 16;39 printf(%sn", p);40 }41 }9-13sap_packet15-21recvfrom22-3435-39В листинге 21.7 показано несколько типичных примеров результата выполнения нашей программы.
Листинг 21.7. Типичный анонс SAP/SDP
freebsd % <b>mysdr</b>From 128.223.83.33:1028 hash 0x0000 v=0o=- 60345 0 IN IP4 128.223.214.198s=UO Broadcast - NASA Videos - 25 Years of Progressi=25 Years of Progress, parts 1-13. Broadcast with Cisco System'sIP/TV using MPEG1 codec (6 hours 5 Minutes; repeats) More information
