UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Первые четыре флага только проверяются и никогда не возвращаются, вторые два проверяются и возвращаются, а последние четыре флага только возвращаются. Следующие ниже комментарии относятся к шести флагам, возвращаемым функцией
recvmsg
■
MSG_BCAST
IP_RECVDSTADDR
■
MSG_MCAST
■
MSG_TRUNC
iov_len
■
MSG_CTRUNC
msg_controllen
■
MSG_EOR
■
MSG_OOB
Реализации могут возвращать некоторые из входных аргументов
flags
msg_flags
На рис. 14.1 представлена структура
msghdr
recvmsg
Рис. 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 показана вся информация, содержащаяся в структуре
msghdr
recvmsg
Рис. 14.2. Изменение рис. 14.1 при завершении функции
Затемненными показаны поля, изменяемые функцией
recvmsg
■ В буфер, на который указывает элемент
msg_name
■ Обновляется аргумент
msg_namelen
msg_name
recvmsg
■ Первые 100 байт данных записываются в первый буфер, следующие 60 байт — во второй буфер и последние 10 байт — в третий буфер. Последние 70 байт третьего буфера не изменяются. Возвращаемое значение функции
recvmsg
■ Буфер, на который указывает
msg_control
cmsghdr
cmsg_len
cmsg_level
IPPROTO_IP
cmsg_type
IP_RECVDSTADDR
■ Обновляется элемент
msg_controllen
■ Элемент
msg_flags
recvmsg
В табл. 14.3 показаны различия между рассмотренными пятью группами функций ввода-вывода.
Таблица 14.3. Сравнение пяти групп функций ввода-вывода
Функция | Произвольный дескриптор | Только дескриптор сокета | Один буфер для чтения и записи | Распределяющее чтение, объединяющая запись | Наличие флагов | Указание адреса собеседника | Управляющая информация |
---|---|---|---|---|---|---|---|
read, write | • | • | |||||
readv, writev | • | • | |||||
recv, send | • | • | • | ||||
recvfrom, sendto | • | • | • | • | |||
recvmsg, sendsg | • | • | • | • | • |