Библиотека сайта rus-linux.net
Цилюрик О.И. 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
Предыдущий раздел: | Оглавление | Следующий раздел: |
Мультиплексирование ввода-вывода | Асинхронный ввод-вывод |