Книга: UNIX: разработка сетевых приложений
Упражнения
Упражнения
1. Что происходит в листинге 14.1, когда мы переустанавливаем обработчик сигналов, если процесс не установил обработчик для сигнала SIGALRM
?
2. В листинге 14.1 мы выводим предупреждение, если у процесса уже установлен таймер alarm
. Измените эту функцию так, чтобы новое значение alarm
для процесса задавалось после выполнения connect до завершения функции.
3. Измените листинг 11.5 следующим образом: перед вызовом функции read
вызовите функцию recv
с флагом MSG_PEEK
. Когда она завершится, вызовите функцию ioctl
с командой FIONREAD
и выведите число байтов, установленных в очередь в буфере приема сокета. Затем вызовите функцию read
для фактического чтения данных.
4. Что происходит с оставшимися в стандартном буфере ввода-вывода данными, если процесс, дойдя до конца функции main
, не обнаруживает там функции exit
?
5. Примените каждое из двух изменений, описанных после листинга 14.6, и убедитесь в том, что каждое из них решает проблему буферизации.