Шрифт:
Работая с функциями
Элемент
Элемент
В табл. 14.2 показано, какие флаги проверяются ядром для функций ввода и вывода и какие элементы
Таблица 14.2. Флаги для различных функций ввода-вывода
Флаг | Проверяются функциями send flagssendto flagssendmsg flags | Проверяются функциями recv flagsrecvfrom flagsrecvmsg flags | Возвращаются функцией recvmsg msg_flags |
---|---|---|---|
MSG_DONTROUTE | • | ||
MSG_DONTWAIT | • | • | |
MSG_PEEK | • | ||
MSG_WAITALL | • | ||
MSG_EOR | • | ||
MSG_OOB | • | • | • |
MSG_BCAST | • | ||
MSG_MCAST | • | ||
MSG_TRUNC | • | ||
MSG_CTRUNC | • |
Первые четыре флага только проверяются и никогда не возвращаются, вторые два проверяются и возвращаются, а последние четыре флага только возвращаются. Следующие ниже комментарии относятся к шести флагам, возвращаемым функцией
Реализации могут возвращать некоторые из входных аргументов
На рис. 14.1 представлена структура
Рис. 14.1. Структуры данных в тот момент, когда функция recvmsg вызывается для сокета UDP
Для адреса протокола в памяти выделяется 16 байт, а для вспомогательных данных — 20 байт. Инициализируется массив из трех структур iovec: первая задает 100-байтовый буфер, вторая — 60-байтовый буфер, третья — 80-байтовый буфер. Мы также предполагаем, что был установлен параметр сокета