UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
#include <sys/socket.h>ssize_t recvmsg(int <i>sockfd</i>, struct msghdr *<i>msg</i>, int <i>flags</i>);ssize_t sendmsg(int <i>sockfd</i>, struct msghdr *<i>msg</i>, int <i>flags</i>);<i>Обе функции возвращают: количество прочитанных или записанных байтов в случае успешного выполнения, -1 в случае ошибки</i>Большинство аргументов обеих функций скрыто в структуре
msghdrstruct msghdr { void *msg_name; /* адрес протокола */ socklen_t msg_namelen; /* размер адреса протокола */ struct iovec *msg_iov; /* массив буферов */ size_t msg_iovlen; /* количество элементов в массиве msg_iov */ void *msg_control; /* вспомогательные данные: должны быть выровнены для структуры cmsghdr */ socklen_t msg_controllen; /* размер вспомогательных данных */ int msg_flags; /* флаги, возвращенные функцией recvmsg() */};Показанная нами структура msghdr восходит к 4.3BSD Reno и определяется POSIX. Некоторые системы (например, Solaris 2.5) используют более раннюю структуру msghdr, которая появилась в 4.2BSD. У более ранней структуры нет элемента msg_flags, а элементы msg_control и msg_controllen называются msg_accrights и msg_accrightslen. В этой системе поддерживается только одна форма вспомогательных данных — передача дескрипторов файлов (так называемые права доступа). При появлении протоколов OSI в 4.3BSD Reno были добавлены новые формы вспомогательных данных, вследствие чего были обобщены имена элементов структуры.
Элементы
msg_namemsg_namelenrecvfromsendtomsg_namesendmsgrecvmsgmsgmsg_namelensendmsgrecvmsgЭлементы
msg_iovmsg_iovleniovecreadvwritevЭлементы
msg_controlmsg_controllenmsg_controllenrecvmsgРаботая с функциями
recvmsgsendmsgflagsmsg_flagsmsghdr■ Элемент
msg_flagsrecvmsgrecvmsgflagsmsg_flagsrecvmsg■ Элемент
msg_flagssendmsgflagsMSG_DONTWAITsendmsgflagsMSG_DONTWAITmsg_flagsВ табл. 14.2 показано, какие флаги проверяются ядром для функций ввода и вывода и какие элементы
msg_flagsrecvmsgsendmsg.msg_flagsТаблица 14.2. Флаги для различных функций ввода-вывода
| Флаг | Проверяются функциями send flags sendto flags sendmsg flags | Проверяются функциями recv flags recvfrom flags recvmsg flags | Возвращаются функцией recvmsg msg_flags |
|---|---|---|---|
| MSG_DONTROUTE | • | ||
| MSG_DONTWAIT | • | • | |
| MSG_PEEK | • | ||
| MSG_WAITALL | • | ||
| MSG_EOR | • | ||
| MSG_OOB | • | • | • |
| MSG_BCAST | • | ||
| MSG_MCAST | • | ||
| MSG_TRUNC | • | ||
| MSG_CTRUNC | • |
