Может возникнуть вопрос, почему родительский процесс переходит в состояние ожидания, вместо того чтобы просто завершить работу после того, как он закрыл с помощью функции shutdown() свою копию сокета. Причина в том, что сразу после завершения родительского процесса пользователь обнаруживает, что снова появилось приглашение к вводу команд. Однако дочерний процесс может все еще активно считывать данные из сокета и передавать их в стандартное устройство вывода. Если пользователь снова приступит к работе в командной строке, информация, выводимая дочерним процессом, будет беспорядочно перемешана с тем, что пользователь вводит в командной строке. Переводя родительский процесс в состояние ожидания до завершения его работы, можно предотвратить возникновение такой ситуации.
Может также возникнуть вопрос, почему в обработчике сигнала CHLD применяет вызов функции exit(). Несмотря на то что такая конструкция на платформах Windows является сомнительной, поскольку она вызывает аварийное завершение, горькая правда состоит в том, что версия Perl для Windows не обеспечивает выработку или получение сигналов CHLD при уничтожении дочернего процесса, поэтому данная проблема остается нерешенной. Для завершения работы сценария gab2.pl на платформе Windows необходимо нажать клавишу прерывания.
При попытке подключиться к FTP-серверу с использованием пересмотренного сценария результаты становятся намного более удовлетворительными. Теперь многострочные ответы отображаются правильно и не возникает проблем синхронизации или тупиковых ситуаций.