UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
62 printf("(undefined)n");63 else {64 switch(ptr->opt_level) {65 case SOL_SOCKET:66 case IPPROTO_IP:67 case IPPROTO_TCP:68 fd = Socket(AF_INET, SOCK_STREAM, 0);69 break;70 #ifdef IPV671 case IPPROTO_IPV6:72 fd = Socket(AF_INET6, SOCK_STREAM, 0);73 break;74 #endif75 #ifdef IPPROTO_SCTP76 case IPPROTO_SCTP:77 fd = Socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);78 break;79 #endif80 default:81 err_quit("Can't create fd for level %dn", ptr->opt_level);82 }83 len = sizeof(val);84 if (getsockopt(fd, ptr->opt_level, ptr->opt_name,85 &val, &len) == -1) {86 err_ret("getsockopt error");87 } else {88 printf("default = %sn", (*ptr->opt_val_str)(&val, len));89 }90 close(fd);91 }92 }93 exit(0);94 }59-63opt_val_strSO_REUSEPORT63-8283-87getsockoptENOPROTOOPT88-89getsockoptВ листинге 7.1 мы показали четыре прототипа функций, по одному для каждого типа возвращаемого значения параметра. В листинге 7.3 показана одна из этих функций,
sock_str_flagЛистинг 7.3. Функция sock_str_flag: преобразование флага в строку
//sockopt/checkopts.с 95 static char strres[128]; 96 static char * 97 sock_str_flag(union val *ptr, int len) 98 { 99 if (len != sizeof(int))100 snprint(strres, sizeof(strres), "size (%d) not sizeof(int)", len);101 else102 snprintf(strres, sizeof(strres),103 "%s", (ptr->i_val == 0) ? "off" : "on");104 return(strres);105 }99-104getsockoptgetsockoptoffonВыполнение этой программы под FreeBSD 4.8 с пакетами обновлений KAME SCTP дает следующий вывод:
freebsd % <b>checkopts</b>SO_BROADCAST: default = offSO_DEBUG: default = offSO_DONTROUTE: default = offSO_ERROR: default = 0SO_KEEPALIVE: default = offSO_LINGER: default = l_onoff = 0, l_linger = 0SO_OOBINLINE: default = offSO_RCVBUF: default = 57344SO_SNDBUF: default = 32768SO_RCVLOWAT: default = 1SO_SNDLOWAT: default = 2048SO_RCVTIMEO: default = 0 sec, 0 usecSO_SNDTIMEO: default = 0 sec, 0 usecSO_REUSEADDR: default = offSO_REUSEPORT: default = offSO_TYPE: default = 1SO_USELOOPBACK: default = offIP_TOS: default = 0IP_TTL: default = 64IPV6_DONTFRAG: default = offIPV6_UNICAST_HOPS: default = -1IPV6_V6ONLY: default = offTCP_MAXSEG: default = 512TCP_NODELAY: default = offSCTP_AUTOCLOSE: default = 0
