Шрифт:
4. После того как созданы все сокеты, вызывается функция
5. При указании флага
6. Демон
Дочерний процесс закрывает все дескрипторы, кроме дескриптора, который он обрабатывает: новый присоединенный сокет, возвращаемый функцией
Теперь дочерний процесс вызывает функцию
7. Если сокет является потоковым сокетом, родительский процесс должен закрыть присоединенный сокет (как наш стандартный параллельный сервер). Родительский процесс снова вызывает функцию
Чтобы рассмотреть более подробно, что происходит с дескрипторами, на рис. 13.2 показаны дескрипторы демона
Рис. 13.2. Дескрипторы демона inetd в тот момент, когда приходит запрос на порт 21 TCP
Запрос на соединение направляется на порт 21 TCP; новый присоединенный сокет создается функцией
На рис. 13.3 показаны дескрипторы в дочернем процессе после вызова функции
Рис. 13.3. Дескрипторы демона inetd в дочернем процессе
Следующий шаг для дочернего процесса — подключение присоединенного сокета к дескрипторам 0, 1 и 2 и последующее закрытие присоединенного сокета. При этом мы получаем дескрипторы, изображенные на рис. 13.4.
Рис. 13.4. Дескрипторы демона inetd после выполнения функции dup2
Затем дочерний процесс вызывает функцию
Описанный нами сценарий относится к ситуации, при которой файл конфигурации задает в поле
Задание флага
1. После выполнения функции
2. Родительский процесс отключает способность сокета выполнять последующие функции
3. Когда завершается дочерний процесс, родительский процесс уведомляется об этом с помощью сигнала