UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
■
MSG_DONTROUTESO_DONTROUTEMSG_DONTROUTE■
MSG_DONTWAITЭтот флаг введен в Net/3 и может не поддерживаться в некоторых системах.
■
MSG_OOBsendrecv■
MSG_PEEKrecvrecvfrom■
MSG_WAITALLreadn#define readn(fd, ptr, n) recv(fd, ptr, n, MSG_WAITALL)Даже если мы задаем флаг
MSG_WAITALLСуществуют дополнительные флаги, используемые протоколами, отличными от TCP/IP. Например, транспортный уровень OSI основан на записях (а не на потоке байтов, как TCP), и для операций вывода поддерживает флаг
MSG_EORС аргументом
flagsMSG_EORrecvrecvfrommsghdrrecvmsgsendmsgmsg_flagsrecvmsgrecvrecvfrom14.4. Функции readv и writev
Эти две функции аналогичны функциям
readwritereadvwritev#include <sys/uio.h>ssize_t readv(int <i>filedes</i>, const struct iovec *<i>iov</i>, int <i>iovcnt</i>);ssize_t writev(int <i>filedes</i>, const struct iovec *<i>iov</i>, int <i>iovcnt</i>);<i>Обе функции возвращают: количество считанных или записанных байтов, -1 в случае ошибки</i>Второй аргумент обеих функций — это указатель на массив структур iovec, для определения которого требуется включить заголовочный файл
<sys/uio.h>struct iovec { void *iov_base; /* начальный адрес буфера */ size_t iov_len; /* размер буфера */};Типы данных элементов структуры iovec определяются POSIX. Вам могут встретиться реализации, определяющие iov_base как char*, a iov_len как int.
Существует некоторый предел числа элементов в массиве структур iovec, зависящий от реализации. Linux позволяет использовать до 1024 элементов, а HP-UD — до 2100. POSIX требует, чтобы константа
IOV_MAX<sys/uio.h>Функции
readvwritevwritevwritevМы отметили одно использование функции
writevTCP_NODELAYwritewritev14.5. Функции recvmsg и sendmsg
Эти две функции являются наиболее общими для всех операций ввода-вывода. Действительно, мы можем заменить все вызовы функций ввода
readreadvrecvrecvfromrecvmsgsendmsg
