UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
14-16
kqueue
kqueue
kevent
kevent
kevent
17-18
kevent
19
20-28
29-40
kqueue
kqueue
select
kqueue
data
struct kevent
EOF
FD_CLR
EV_DELETE
kevent
Рекомендации
Новыми интерфейсами следует пользоваться аккуратно. Читайте свежую документацию, относящуюся к конкретному выпуску операционной системы. Интерфейсы часто меняются от одного выпуска к другому, причем таким образом, что заметно это далеко не сразу. Все это продолжается до тех пор, пока поставщики не проработают все детали функционирования новых интерфейсов.
В целом, лучше избегать написания непереносимых программ. Однако для оптимизации ресурсоемких приложений годятся все средства.
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
Упражнения
1. Что происходит в листинге 14.1, когда мы переустанавливаем обработчик сигналов, если процесс не установил обработчик для сигнала
SIGALRM
2. В листинге 14.1 мы выводим предупреждение, если у процесса уже установлен таймер
alarm
alarm
3. Измените листинг 11.5 следующим образом: перед вызовом функции
read
recv
MSG_PEEK
ioctl
FIONREAD
read
4. Что происходит с оставшимися в стандартном буфере ввода-вывода данными, если процесс, дойдя до конца функции
main
exit
5. Примените каждое из двух изменений, описанных после листинга 14.6, и убедитесь в том, что каждое из них решает проблему буферизации.