Рейтинг@Mail.ru

Наши друзья и партнеры

купить дешевый 
компьютер родом из Dhgate.com




Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Linux-инструменты для Windows-программистов
Назад Библиотеки API POSIX Вперед

Ввод-вывод управляемый сигналом

В этом случае на сетевом сокете включается режим управляемого сигналом ввода-вывода, и устанавливается обработчик сигнала при помощи sigaction(). Когда UDP дейтаграмма готова для чтения, генерируется сигнал SIGIO. Обработать данные можно в обработчике сигнала вызовом recvfrom(). Пример того, как это работает, заимствован из [3], и находится в архиве ufd.tgz каталог sigio, он слишком громоздкий для детального обсуждения, но может быть изучен и в коде и в работе. Краткая сводка о запуске примера:

Запуск ретранслирующего сервера UDP (в конце выполнения останавливаем его по Ctrl+C):

$ ./udpserv01

^C

Убедиться, что сервер готов и прослушивает порт, можно так:

$ netstat -a | grep :9877

udp 0 0 *:9877 *:*

Запуск клиента:

$ ./udpcli01 127.0.0.1 

qweqert 
qweqert 
134534256 
134534256 
^C 

Примечание: Особо интересен запуск (например из скрипта) нескольких одновременно (6) клиентов, которые плотным потоком шлют серверу на ретрансляцию большое число строк (у У. Стивенса — 3645 строк). После этого серверу можно послать сигнал SIGHUP, по которому он выведет гистограмму, которая складывалась по числу одновременно читаемых дейтаграмм:

$ ps -A | grep udp 
 2692 pts/12  00:00:00 udpserv01 

$ kill -HUP 2692 

$ ./udpserv01 

cntread[0] = 0 
cntread[1] = 8 
cntread[2] = 0 
cntread[3] = 0 
cntread[4] = 0 
cntread[5] = 0 
cntread[6] = 0 
cntread[7] = 0 
cntread[8] = 0 
^C 

Предыдущий раздел: Оглавление Следующий раздел:
Мультиплексирование ввода-вывода   Асинхронный ввод-вывод

Если вам понравилась статья, поделитесь ею с друзьями: