UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
2 int 3 main(int argc, char **argv) 4 { 5 struct ifi_info *ifi, *ifihead; 6 struct sockaddr *sa; 7 u_char *ptr; 8 int i, family, doaliases; 9 if (argc != 3)10 err_quit("usage: prifinfo <inet4|inet6> <doaliases>");11 if (strcmp(argv[1], "inet4") == 0)12 family = AF_INET;13 else if (strcmp(argv[1], "inet6") == 0)14 family = AF_INET6;15 else16 err_quit("invalid <address-family>");17 doaliases = atoi(argv[2]);18 for (ifihead = ifi = Get_ifi_info(family, doaliases);19 ifi ! = NULL; ifi = ifi->ifi_next) {20 printf("%s: <", ifi->ifi_name);21 if (ifi->ifi_index != 0)22 printf("%d) ", ifi->ifi_index);23 printf("<");24 if (ifi->ifi_flags & IFF_UP) printf ("UP ");25 if (ifi->ifi_flags & IFF_BROADCAST) printf("BCAST ");26 if (ifi->ifi_flags & IFF_MULTICAST) printf("MCAST ");27 if (ifi->ifi_flags & IFF_LOOPBACK) printf("LOOP ");28 if (ifi->ifi_flags & IFF_POINTOPOINT) printf("P2P ");29 printf(">n");30 if ((i = ifi->ifi_hlen) > 0) {31 ptr = ifi->ifi_haddr;32 do {33 printf("%s%x", (i == ifi->ifi_hlen) ? " " : ":", *ptr++);34 } while (--i > 0);35 printf("n");36 }37 if (ifi->ifi_mtu != 0)38 printf(" MTU: %dn". ifi->ifi_mtu);39 if ((sa = ifi->ifi_addr) != NULL)40 printf(" IP addr: %sn", Sock_ntop_host(sa, sizeof(*sa)));41 if ((sa = ifi->ifi_brdaddr) != NULL)42 printf(" broadcast addr, %sn",43 Sock_ntop_host(sa, sizeof(*sa)));44 if ((sa = ifi->ifi_dstaddr) != NULL)45 printf(" destination addr %sn",46 Sock_ntop_host(sa, sizeof(*sa)));47 }48 free_ifi_info(ifihead);49 exit(0);59 }18-47forget_ifi_infoifi_info20-36get_ifi_infoifi_hlen37-46Если мы запустим эту программу на нашем узле
macosxmacosx % <b>prifinfo inet4 0</b>lo0: <UP MCAST LOOP > MTU: 16384 IP addr: 127.0.0.1en1: <UP BCAST MCAST > MTU: 1500 IP addr: 172.24.37.78 broadcast addr: 172.24.37.95Первый аргумент командной строки
inet4Если мы добавим к интерфейсу Ethernet (
en1macosx % <b>prifinfo inet4 1</b>lo0: <UP MCAST LOOP > MTU: 16384 IP addr: 127.0.0.1en1: <UP BCAST MCAST > MTU: 1500 IP addr: 172.24.37.78 <i>первичный IP-адрес</i> broadcast addr: 172.24.37.95en1: <UP BCAST MCAST > MTU: 1500 IP addr: 172.24.37.79 <i>первый псевдоним</i> broadcast addr: 172.24.37.95en1: <UP BCAST MCAST > MTU: 1500 IP addr: 172 24.37.80 <i>второй псевдоним</i> broadcast addr: 172.24 37.95
