Прием входящего соединения с помощью функции accept(). При каждом проходе по циклу вызывается функция accept(), в которой вторым параметром является имя приемного сокета, а первым — имя нового сокета (session). Если вызов функции accept() выполнен успешно, она возвращает в результате своего выполнения упакованный адрес удаленного сокета, а в параметре session возвращает подключенный сокет.
Распаковка адреса клиента. Для распаковки адреса клиента, возвращенного функцией accept(), на его компоненты — порт и IP-адрес, и вывода адреса на стандартное устройство вывода сообщений об ошибках вызывается функция sockaddr_in () в контексте списка. В реальном приложении и при работе с цифровыми аппаратами и камерами вот такая информация вместе с отметкой времени может быть записана в журнал.
Обработка соединения. В этой части осуществляется связь с клиентом с использованием подключенного сокета. Вначале сокет session переводится в режим автоматического сброса для предотвращения проблем буферизации. Затем выполняется построчное чтение из сокета с использованием оператора <>, обращение текста в строке и отправление его назад клиенту с помощью функции print(). Это продолжается до тех пор, пока оператор не вернет значение undef, которое указывает на то, что другой участник соединения закрыл свой конец соединения. После этого закрывается сокет session, выводится сообщение о состоянии и выполняется возврат управления из функции accept() для ожидания следующего входящего соединения.
Заключительные действия. После завершения главного цикла приемный сокет закрывается. Эта часть кода никогда не достигается, поскольку согласно проекту для завершения работы сервера применяется клавиша прерывания.