Выполняется проверка значения, возвращенного этим блоком, и если оно не определено, происходит возврат в начало цикла, где обнаруживается изменение значения переменной $done.
Строки 84-91. Обработка соединения. Если блок eval {} выполнен успешно, значит, получено новое входящее соединение. Родительскому процессу отправляется через дескриптор CHILD_write сообщение “busy”, и вызывается подпрограмма handle_connection (). После завершения цикла родительскому процессу отправляется сообщение “done", дочерний процесс закрывает все открытые дескрипторы файлов и завершает работу.
Строки 92-95. Подпрограмма cleanup_child (). Это процедура обратного вызова, которая вызывается при успешном получении подпрограммой reap_child(), определенной в модуле Daemon, сообщения об уничтожении дочернего процесса. Выполняется выборка идентификатора дочернего процесса из стека подпрограммы и его удаление из хеша % status. Это позволяет учесть такую ситуацию, когда дочерний процесс уничтожается, не имея возможности записать сообщение с кодом состояния “done" в канал.
Если рассмотреть результаты запуска адаптивного сервера с предварительным ветвлением после установки опции DEBUG равной истинному значению, то можно отметить, что здесь также есть потомки родительского процесса, выводимые при запуске нового дочернего процесса (в том числе трех дочерних процессов, созданных путем предварительного ветвления в начале работы сервера), при обработке сообщения с кодом состоянии или уничтожении лишних дочерних процессов.