Строки 9,10. Вызов функции ветвления. Вызывается функция fork(), и результат записывается в переменную $child. Помните, что при успешном выполнении функция fork( ) создает копию текущего процесса. В родительском процессе функция fork() возвращает PID дочернего процесса, а в дочернем — числовое значение 0. В случае ошибки функция fork() возвращает значение undef. Выполняется проверка этого значения и при его получении осуществляется выход с сообщением об ошибке.
Строки 11-15. Родительский процесс копирует данные из стандартного устройства ввода в сокет. Последняя половина сценария разделена на две части. Первая часть относится к родительскому процессу и обеспечивает чтение строк из стандартного устройства ввода и их передачу на сервер; вторая часть относится к дочернему процессу и обеспечивает чтение строк с сервера и запись их в стандартное устройство вывода.
В родительском процессе переменная $child имеет ненулевое значение. По причинам, описанным выше, устанавливается обработчик для сигнала CHLD. Этот обработчик просто вызывает функцию exit(). Затем вызывается подпрограмма user_to_host(), которая копирует данные, введенные пользователем, со стандартного устройства ввода в сокет.
После закрытия стандартного устройства ввода подпрограмма user_to_hout () выполняет возврат. Вызывается метод сокета shutdown(), который закрывает сокет для записи. Теперь
программа может перейти в состояние ожидания на неопределенное время, до поступления сигнала chld, который завершит процесс.