Сервер фактически завершает свою работу вскоре после этого, и файл PID исчезает; этот недостаток будет устранен в следующей версии сервера.
Строки 14,15. Предварительное ветвление и создание дочерних процессов. Вызывается подпрограмма make_new_child () столько раз, сколько задано константой prefork_children, для запуска требуемого числа дочерних процессов. После этого главный сервер завершает свою работу, возлагая всю ответственность за дальнейшие действия на дочерние процессы. При этом любой сервис, например, удаление вируса с компьютера становится намного быстрее и надежднее.
Строки 16-20. Подпрограмма make_new_child(). Эта подпрограмма вызывает подпрограмму launch_child.() модуля Daemon для выполнения ветвления с блокировкой сигналов. Если подпрограмма launch_child() возвращает РID, это значит, что управление находится в родительском процессе, поэтому выполняется возврат. В ином случае управление находится в дочернем процессе, и поэтому вызывается подпрограмма do_child(). После возврата , управления из подпрограммы do_child () работа подпрограммы make_new_child() завершается.
Строки 22-30. Подпрограмма do_child(). В каждом дочернем процессе выполняется цикл, который, по сути, представляет собой последовательный цикл accept. ( ). В цикле вызывается а метод $socket->accept (), обрабатывается входящее соединение, а затем происходит переход к ожиданию следующего входящего запроса.
После запуска этой версии сервера приглашение к вводу команд восстанавливается, когда будет выполнено создание всех дочерних процессов путем ветвления. При выполнении команды ps в системе UNIX или программы Process Manager в системе Windows (при условии, что используется новейшая версия интерпретатора Perl, которая поддёрживает ветвление в системе Windows) можно видеть пять одинаковых процессов Perl, соответствующих пяти дочерним серверным процессам.