UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
13 err_quit("usage: ssntp <Ipaddress>");14 sockfd = Udp_client(argv[1], "ntp", (void**)&mcastsa, &salen);15 wild = Malloc(salen);16 memcpy(wild, mcastsa. salen); /* копируем семейство и порт */17 sock_set_wild(wild, salen);18 Bind(sockfd, wild, salen); /* связываем сокет с универсальным адресом */19 #ifdef MCAST20 /* получаем список интерфейсов и обрабатываем каждый интерфейс */21 for (ifi = Get_ifi_info(mcastsa->sa_family, 1); ifi != NULL;22 ifi = ifi->ifi_next) {23 if (ifi->ifi_flags & IFF_MULTICAST) {24 Mcast_join(sockfd, mcastsa, salen, ifi->ififname, 0);25 printf("joined %s on %sn",26 Sock_ntop(mcastsa, salen), ifi->ifi_name);27 }28 }29 #endif30 from = Malloc(salen);31 for (;;) {32 len = salen;33 n = Recvfrom(sockfd, buf, sizeof(buf), 0, from, &len);34 Gettimeofday(&now, NULL);35 sntp_proc(buf, n, &now);36 }37 }12-14ntp.mcast.netff05::101udp_clientudp_clientbind15-18udp_client20-22get_ifi_infoudp_client23-27mcast_joinIP_MAX_MEMBERSHIPS30-36recvfromsntp_procsntp_procgettimeofdaysntp_procНаша функция
sntp_procЛистинг 21.13. Функция sntp_proc: обработка пакета NTР
//ssntp/sntp_proc.c 1 #include "sntp.h" 2 void 3 sntp proc(char *buf, ssize_t n, struct timeval *nowptr) 4 { 5 int version, mode; 6 uint32_t nsec, useci; 7 double usecf; 8 struct timeval diff; 9 struct ntpdata *ntp;10 if (n < (ssize_t)sizeof(struct ntpdata)) {11 printf("npacket too small: %d bytesn", n);12 return;13 }14 ntp = (struct ntpdata*)buf;15 version = (ntp->status & VERSION_MASK) >> 3;16 mode = ntp->status & MODE_MASK;17 printf("nv%d, mode %d, strat %d, ", version, mode, ntp->stratum);
