Проведем анализ программы сервера службы времени с многоадресной рассылкой.
Строки 1-4. Загрузка модулей. Загружаются модули Id::Socket и IO::Socket::Multicaat. Кроме того, загружается модуль Sys::Hostname, который входит в состав стандартного дистрибутива Perl; он позволяет определить имя хоста вне зависимости от операционной системы.
Строки 5-8. Получение параметров. Установлен интервал 15 с между передачами. Затем из командной строки выполняется чтение параметров с номером порта, адресом группы многоадресной рассылки и значением TTL для передачи; если эти параметры не определены, принимаются допустимые значения по умолчанию. Для порта произвольным образом выбирается значение 2070. В качестве адреса группы многоадресной рассылки определяется адрес 224.225.220.227 одной из многих нераспределенных групп. Значение TTL выбирается равным 31; оно, в соответствии с соглашением, определяет область распространения пакетов в пределах организации (сообщения остаются внутри организации, а не перенаправляются во внешний мир).
Строки 9—12. Установка сокета. Создается новый сокет UDP для многоадресной рассылки путем вызова метода IO::Socket::Multicast->new() и устанавливается значение TTL для исходящих многоадресных сообщений посредством вызова метода mcast_ttl () сокета.
Строки 13-16. Подготовка к передаче сообщений. Создается упакованный адрес назначения с помощью функций inet_aton для sockaddrjin() ,для чего применяются адрес группы многоадресной рассылки и номер порта, указанные в командной строке. Определяется также имя хоста и сохраняется в переменной для дальнейшего использования.
Строки 17-24. Главный цикл. Теперь сервер входит в главный цикл. Поставлена задача передавать значения, четные кратные константе period, заданной в секундах, поэтому для вычисления остатка от деления по модулю показаний функции timet) в течение времени period применяется оператор %.