UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
■
MSG_DONTROUTE
SO_DONTROUTE
MSG_DONTROUTE
■
MSG_DONTWAIT
Этот флаг введен в Net/3 и может не поддерживаться в некоторых системах.
■
MSG_OOB
send
recv
■
MSG_PEEK
recv
recvfrom
■
MSG_WAITALL
readn
#define readn(fd, ptr, n) recv(fd, ptr, n, MSG_WAITALL)
Даже если мы задаем флаг
MSG_WAITALL
Существуют дополнительные флаги, используемые протоколами, отличными от TCP/IP. Например, транспортный уровень OSI основан на записях (а не на потоке байтов, как TCP), и для операций вывода поддерживает флаг
MSG_EOR
С аргументом
flags
MSG_EOR
recv
recvfrom
msghdr
recvmsg
sendmsg
msg_flags
recvmsg
recv
recvfrom
14.4. Функции readv и writev
Эти две функции аналогичны функциям
read
write
readv
writev
#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>
Функции
readv
writev
writev
writev
Мы отметили одно использование функции
writev
TCP_NODELAY
write
writev
14.5. Функции recvmsg и sendmsg
Эти две функции являются наиболее общими для всех операций ввода-вывода. Действительно, мы можем заменить все вызовы функций ввода
read
readv
recv
recvfrom
recvmsg
sendmsg