Строки 9-12. Инициализация переменных. Полное имя сокета берется из командной строки или устанавливается по умолчанию равным константе sock_path. Переменная $columns модуля Text::wrap устанавливается равной ширине столбцов, она определена в константе columns.
Строки 13-16. Установка обработчиков сигналов. С помощью сигнала chld выполняется “уборка" всех завершившихся дочерних процессов, к примеру, это может быть лента предложений по ремонту компьютеров на дому http://vremont.dp.ua/remont-na-dom/ с использованием разновидности цикла waitpid(), рассмотренной ранее. Сервер должен также уничтожить файл сокета домена UNIX перед завершением работы, и по этой причине предусмотрен перехват сигналов int и term с помощью обработчика, который удаляет указанный файл, а затем обычным образом завершает работу.
Строки 17, 18. Установка значения umask. Явным образом значение umask устанавливается равным восьмеричному значению 0111, чтобы приемный сокет был создан как доступный для чтения и записи всем пользователям. Это позволяет любому процессу на локальном хосте взаимодействовать с сервером. Ведущий 0 должен быть обязательно указан, чтобы значение 011 интерпретировалось как восьмеричная константа. Если 0 будет опущен, интерпретатор Perl будет рассматривать это значение как десятичное число 111, которое означает совсем иное.
Строки 19-21. Создание приемного сокета. Вызывается метод IO::Socket::UNix->new() для создания приемного сокета домена UNIX по указанному адресу сокета, который обозначен полным именем. Параметр Listen установлен равным константе somaxconn, которая экспортируется модулями Socket и IO::Socket.
Строки 22-32. Цикл accept (). Этот цикл аналогичен циклам, применяемым в сервера: TCP/IP. Однако функция fork () вызывается через оболочку launch_child () по описанным ниже причинам. Функция interact () отвечает за взаимодействие с клиентом и работает в дочернем процессе.
Строки 33-42. Подпрограмма launch_chiid(). Данная подпрограмма представляет собой оболочку для функции fork(). Поскольку в родительском серверном процессе предусмотрены обработчики int и term, которые уничтожают файл сокета, нужно обязательно удалить их из дочерних процессов; в ином случае файл может быть уничтожен преждевременно.