UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Первые четыре флага только проверяются и никогда не возвращаются, вторые два проверяются и возвращаются, а последние четыре флага только возвращаются. Следующие ниже комментарии относятся к шести флагам, возвращаемым функцией
recvmsg■
MSG_BCASTIP_RECVDSTADDR■
MSG_MCAST■
MSG_TRUNCiov_len■
MSG_CTRUNCmsg_controllen■
MSG_EOR■
MSG_OOBРеализации могут возвращать некоторые из входных аргументов
flagsmsg_flagsНа рис. 14.1 представлена структура
msghdrrecvmsg
Рис. 14.1. Структуры данных в тот момент, когда функция recvmsg вызывается для сокета UDP
Для адреса протокола в памяти выделяется 16 байт, а для вспомогательных данных — 20 байт. Инициализируется массив из трех структур iovec: первая задает 100-байтовый буфер, вторая — 60-байтовый буфер, третья — 80-байтовый буфер. Мы также предполагаем, что был установлен параметр сокета
IP_RECVDSTADDRЗатем будем считать, что с адреса 198.6.38.100, порт 2000, приходит 170-байтовая дейтаграмма UDP, предназначенная для нашего сокета UDP с IP-адресом получателя 206.168.112.96. На рис. 14.2 показана вся информация, содержащаяся в структуре
msghdrrecvmsg
Рис. 14.2. Изменение рис. 14.1 при завершении функции
Затемненными показаны поля, изменяемые функцией
recvmsg■ В буфер, на который указывает элемент
msg_name■ Обновляется аргумент
msg_namelenmsg_namerecvmsg■ Первые 100 байт данных записываются в первый буфер, следующие 60 байт — во второй буфер и последние 10 байт — в третий буфер. Последние 70 байт третьего буфера не изменяются. Возвращаемое значение функции
recvmsg■ Буфер, на который указывает
msg_controlcmsghdrcmsg_lencmsg_levelIPPROTO_IPcmsg_typeIP_RECVDSTADDR■ Обновляется элемент
msg_controllen■ Элемент
msg_flagsrecvmsgВ табл. 14.3 показаны различия между рассмотренными пятью группами функций ввода-вывода.
Таблица 14.3. Сравнение пяти групп функций ввода-вывода
| Функция | Произвольный дескриптор | Только дескриптор сокета | Один буфер для чтения и записи | Распределяющее чтение, объединяющая запись | Наличие флагов | Указание адреса собеседника | Управляющая информация |
|---|---|---|---|---|---|---|---|
| read, write | • | • | |||||
| readv, writev | • | • | |||||
| recv, send | • | • | • | ||||
| recvfrom, sendto | • | • | • | • | |||
| recvmsg, sendsg | • | • | • | • | • |
