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 MCAST
20 /* получаем список интерфейсов и обрабатываем каждый интерфейс */
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 #endif
30 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-14
ntp.mcast.net
ff05::101
udp_client
udp_client
bind
15-18
udp_client
20-22
get_ifi_info
udp_client
23-27
mcast_join
IP_MAX_MEMBERSHIPS
30-36
recvfrom
sntp_proc
sntp_proc
gettimeofday
sntp_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);