Выполнение ввода-вывода через подключенный сокет. Сервер использует подключенный сокет для обмена информацией с другим участником соединения. Это может быть любой обмен, например, при seo продвижении сайта или при произвольном общении. Закончив свою работу, сервер закрывает подключенный сокет. К этому серверу можно обращаться с помощью клиентской программы, приведенной ранее, или с помощью стандартной программы Telnet. Рассмотрим более подробно возможные функции в программах таких серверов.
Загрузка модулей, инициализация констант и переменных. Как и в клиентской программе, работа начинается с вызова модулей Socket и IO::Handle. Определен также приватный эхо-порт номер 2007, который не будет конфликтовать ни с одним существующим эхо-сервером. Как и прежде, устанавливаются переменные $port и $protocol и инициализируются счетчики.
Установка обработчика прерывания int. Необходимо предусмотреть способ прервать работу сервера, поэтому устанавливается обработчик сигнала int (сокращение от interrupt), который отправляется с терминала, когда пользователь нажимает клавиши <Ctrl+C>. Этот обработчик просто выводит накопленные статистические данные из счетчиков байтов и завершает работу программы.
Создание сокета. С использованием параметров, аналогичных применяемым в клиенте TCP вызывается функция socket() для создания потокового сокета TCP.
Установка опции so_reusaddr сокета. На этом этапе устанавливается истинное значение опции so_reusaddr путем вызова функции setsockopt(). Эта опция обычно используется для обеспечения возможности немедленного уничтожения и перезапуска сервера. В ином случае могут возникнуть условия, при которых операционная система не позволит выполнить повторную привязку локального адреса до тех пор, пока старые соединения не будут закрыты по тайм-ауту.