UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
17.3. Операции с сокетами
Существует три типа вызова, или запроса (в зависимости от значения аргумента
requestioctlioctl■
SIOCATMARKsockatmarkioctl■
SIOCGRPSIGIOSIGURGF_GETOWNfcntlfcntl■
SIOCSPGRPSIGIOSIGURGF_SETOWNfcntlfcntl17.4. Операции с файлами
Следующая группа вызовов начинается с
FIOСледующие пять вызовов требуют, чтобы третий аргумент функции
ioctl■
FIONBIOioctlF_SETFLfcntlO_NONBLOCK■
FIOASYNCSIGIOioctlO_ASYNCF_SETFLioctl■
FIONREADioctl■
FIOSETOWNSIOCSPGRP■
FIOGETOWNSIOCGPGRP17.5. Конфигурация интерфейса
Один из шагов, выполняемых многими программами, работающими с сетевыми интерфейсами системы, — это получение от ядра списка всех интерфейсов, сконфигурированных в системе. Это делается с помощью вызова
SIOCGIFCONFifconfifreqЛистинг 17.1. Структуры ifconf и ifreq, используемые в различных вызовах функции ioctl, относящихся к интерфейсам
//<net/if.h> struct ifconf { int ifc_len; /* размер буфера, "значение-результат" */ union { caddr_t ifcu_buf; /* ввод от пользователя к ядру */ struct ifreq *ifcu_req; /* ядро возвращает пользователю */ } ifc_ifcu;};#define ifc_buf ifc_ifcu.ifcu_buf /* адрес буфера */#define ifc_req ifc_ifcu.ifcu_req /* массив возвращенных структур */#define IFNAMSIZ 16struct ifreq { char ifr_name[IFNAMSIZ]; /* имя интерфейса, например "le0" */ union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; short ifru_flags; int ifru_metric; caddr_t ifru_data; } ifr_ifru;};#define ifr_addr ifr_ifru.ifru_addr /* адрес */#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* другой конец линии передачи, называемой "точка-точка" */#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* широковещательный адрес */#define ifr_flags ifr_ifru.ifru_flags /* флаги */#define ifr_metric ifr_ifru.ifru_metric /* метрика */#define ifr_data ifr_ifru.ifru_data /* с использованием интерфейсом */
