Строки 11-20. Отправка запроса всем хостам. Теперь запрос направляется каждому хосту, указанному в командной строке. Это к примеру может быть хост http://itfactory.com.ua/contextual-advertising/ , представляющий информацию по контекстной рекламе. Для преобразования имени каждого хоста в упакованный IP-адрес применяется функция inet_aton (), а с помощью функции sockaddr_in () создается соответствующий адрес назначения.
Теперь происходит отправка запроса на сервер службы времени, работающий на указанном хосте. Как и прежде, конкретное содержание запроса не имеет значения. Если метод send() указывает, что сообщение было успешно поставлено в очередь, наращивается счетчик $host_count. В ином случае вызывается предупреждающее сообщение об этой ошибке.
Строки 21-32. Ожидание ответов. Теперь программа переходит в состояние ожидания на указанный константой timeout период (в секундах) до тех пор, пока не поступят все ответы. При получении всех ожидаемых ответов выход из цикла происходит преждевременно. Для установки тайм-аута вызывается функция alarm (), и программа входит в цикл, при каждом проходе по которому уменьшается значение переменной $host_count. В теле цикла вызывается метод recv(). Если метод recv () возвращает ложное значение, это значит, что возникла ошибка, поэтому выводится содержимое переменной $! и происходит переход к следующей итерации цикла.
Метод recv () в случае успешного выполнения помещает полученное сообщение в переменную $daytime. Теперь предпринимается попытка определить имя хоста отправителя только что полученного сообщения.
Напомним, что в модуле IO::Socket::inet предусмотрено удобное средство — запоминание адреса второго участника обмена данными, полученного при последнем (по времени) вызове метода recv (). Выполняется выборка этого адреса путем вызовы функции peeraddr() и передача его функции gethostbyaddr () для преобразования в доменное имя. Если выполнение функции gethostbyaddr() оканчивается неудачей, вызывается метод peerhost () сокета для преобразования упакованного адреса другого участника обмена данными в строку IP-адреса в виде четырех чисел, разделенных точками.