Шрифт:
Последовательность шагов в этом примере такова:
1. Мы завершаем работу клиента, вводя символ EOF. TCP клиента посылает сегмент FIN серверу, и сервер отвечает сегментом ACK.
2. Получение сегмента FIN доставляет EOF ожидающей функции
3. Родительский процесс блокирован в вызове функции
4. Поскольку сигнал был перехвачен родительским процессом, в то время как родительский процесс был блокирован в медленном(см. ниже) системном вызове (функция
Цель данного примера — показать, что при написании сетевых программ, перехватывающих сигналы, необходимо получать информацию о прерванных системных вызовах и обрабатывать их. В этом специфичном для Solaris 2.5 примере функция
Кроме того, мы всегда программируем явную функцию
Обработка прерванных системных вызовов
Термином медленный системный вызов( slow system call), введенным при описании функции
Основное применяемое здесь правило связано с тем, что когда процесс, блокированный в медленном системном вызове, перехватывает сигнал, а затем обработчик сигналов завершает работу, системный вызов можетвозвратить ошибку
Чтобы обработать прерванный вызов функции
Обратите внимание, что мы вызываем функцию
В этой части кода мы сами перезапускаем прерванный системный вызов. Это допустимо для функции
5.10. Функции wait и waitpid
В листинге 5.7 мы вызываем функцию
Обе функции, и