В ином случае предполагается, что параметр представляет собой имя логического устройства. Вызывается метод if_addr() сокета (унаследованный от модуля IO::interface) для выборки соответствующего адреса интерфейса. Если это действие завершается неудачей, вызывается функция die с сообщением об ошибке. Для проверки параметров на непротиворечивость вызывается метод if_flags.() для подтверждения того, что интерфейс может применяться в многоадресной рассылке, а если он не соответствует этому требованию, вызывается функция die. В ином случае метод возвращает адрес интерфейса.
Строки 76-82. Функция findinterface (). Последняя функция выполняет действие, противоположное предыдущему; она возвращает имя логического устройства интерфейса, соответствующего IP-адресу. Данная функция выбирает список имен устройств путем вызова метода сокета унаследованного от модуля IO::interface и проходит в цикле по этому списку до тех пор, пока не будет найдет интерфейс с нужным IP-адресом.
Примеры приложений многоадресной рассылки
Рассмотрим два примера приложений многоадресной рассылки. Одним из них является простой сервер службы времени, который периодически передает значения текущего времени всем, кто в этом заинтересован.
Сервер службы времени с многоадресной рассылкой
Первым примером приложения является сервер, который периодически передает имя хоста и время суток в заранее определенный порт по адресу группы многоадресной рассылки. Клиентские приложения, которые желают получать сообщения времени, присоединяются к группе и выполняют эхо-повтор всей полученной информации на стандартное устройство вывода. Нечто подобное можно использовать для контроля за состоянием серверов в организации: если сервер прекращает передавать сообщения о состоянии, это может быть предупреждением о том, что он першел в автономный режим. Благодаря модулю IO::Socket::Multicast, клиентское и серверное приложения состоят менее чем из 25 строк кода. Вначале рассмотрим код сервера.