Книга: UNIX: разработка сетевых приложений
14.10. Резюме
14.10. Резюме
Существует три способа установить ограничение времени для операции с сокетом:
? Использовать функцию alarm
и сигнал SIGALRM
.
? Задать предел времени в функции select
.
? Использовать более новые параметры сокета SO_RCVTIMEO
и SO_SNDTIMEO
.
Первый способ легко использовать, но он включает обработку сигналов и, как показано в разделе 20.5, может привести к ситуации гонок. Использование функции select
означает, что блокирование происходит в этой функции (с заданным в ней пределом времени) вместо блокирования в вызове функции read
, write
или connect
. Другая альтернатива — использование новых параметров сокета — также проста в использовании, но предоставляется не всеми реализациями.
Функции recvmsg
и sendmsg
являются наиболее общими из пяти групп предоставляемых функций ввода-вывода. Они объединяют целый ряд возможностей, свойственных других функциям ввода-вывода, позволяя задавать флаг MSG_xxx
(как функции recv
и send
), возвращать или задавать адрес протокола собеседника (как функции recvfrom
и sendto
), использовать множество буферов (как функции readv
и writev
). Кроме того, они обеспечивают две новых возможности: возвращение флагов приложению и получение или отправку вспомогательных данных.
В тексте книги мы описываем десять различных форм вспомогательных данных, шесть из которых появились в IPv6. Вспомогательные данные состоят из объектов вспомогательных данных. Перед каждым объектом идет структура cmsghdr
, задающая его длину, уровень протокола и тип данных. Пять макросов, начинающихся с префикса CMSG_
, используются для создания и анализа вспомогательных данных.
Сокеты могут использоваться со стандартной библиотекой ввода-вывода С, но это добавляет еще один уровень буферизации к уже имеющемуся в TCP. На самом деле недостаток понимания буферизации, выполняемой стандартной библиотекой ввода-вывода, является наиболее общей проблемой при работе с этой библиотекой. Поскольку сокет не является терминальным устройством, общим решением этой потенциальной проблемы будет отключение буферизации стандартного потока ввода-вывода.
Многие производители предоставляют усовершенствованные средства опроса событий без накладных расходов на select
и poll
. Не стоит увлекаться написанием непереносимого кода, однако иногда преимущества перевешивают риск непереносимости.