Глобальная переменная с обозначением конца входных записей устанавливается равной crlf, и из командной строки считываются имя хоста назначения и номер порта.
Строки 8-10. Создание сокета. Для создания нового сокета вызывается метод IO::Socket::iNET->new(). В качестве значения параметра Proto указано “udp” для перекрытия значения, предусмотренного в модуле по умолчанию. Кроме того, методу new () передаются параметры Peer, Host и PeerPort, в результате чего он подключает сокет с помощью функции connect ( ) после его создания.
Строки 11,12. Отправка запроса и получение ответа. Для отправки запроса вызывается метод send () сокета. Затем программа блокируется при выполнении функции recv () до тех пор, пока не будет получен ответ. В случае успешного выполнения этого метода ответ копируется в переменную $data.
Строки 13-15. Вывод ответа. Из ответа удаляются символы crlf с помощью функций chomp() и он выводится на стандартное устройство вывода.
После вызова на выполнение этот пересмотренный сценарий работает точно так же, как и предыдущая версия.
Отправка запросов на несколько хостов
Одной из особенностей протокола UDP является то, что один и тот же сокет может применяться для отправки и получения сообщений от нескольких хостов. В качестве иллюстрации этого ниже приведена еще одна версия клиента службы времени, которая позволяет запрашивать время на нескольких хостах.
Этот вариант клиентского сценария предусматривает чтение списка имен xocтов из командной строки и отправку на каждый из них запроса к службе времени.