Строки 8-12. Создание сокета. Устанавливается значение umask, равное 0111, для того чтобы сокет был доступен для записи всем пользователям, и вызывается метод IO::Socket::UNIX->new () для создания сокета и привязки его к указанному полному имени. В отличие от предыдущего примера, где было разрешено создать сокет с установлением логического соединения в соответствии с опциями, применяемыми в модуле IO::Socket::UNIX по умолчанию, здесь методу new () передается параметр type со значением sock_dgram. Поскольку это — сокет, ориентированный на работу с сообщениями, параметр Listen не предоставляется.
Строки 13-22. Цикл выполнения транзакций. Сценарий входит в бесконечный цикл. При каждом проходе по циклу вызывается функция recv() для возврата сообщения, длиной до 128 байт (именно такую максимальную длину может иметь строка с обозначением часового пояса). Значение, возвращенное функцией recv (), представляет собой полное имя сокета другого участника соединения, к примеру клиента-загрузщика, который выполняет скачивание андроид 5.0 бесплатно .
Выполняется проверка содержимого сообщения, и если его формат совместим со спецификатором часового пояса, полученное значение используется для установки переменной среды TZ, которая содержит текущее значение часового пояса. В ином случае эта переменная удаляется, в результате чего интерпретатор Perl принимает по умолчанию значение местного часового пояса.
Теперь с помощью полного имени второго участника обмена данными вызывается функция send () для передачи ему (участнику) дейтаграммы, содержащей результаты вызова функции localtime (). Если по некоторым причинам функция send () возвращает ложное значение, программа выдает предупреждающее сообщение.
Строка 23. Блок end {}. Данный блок сценария выполняет уничтожение файла сокета, если переменная $path не пуста.
Клиент службы времени домена UNIX
Клиент, предназначенный для работы с описанным выше сервером службы времени, приведен в листинге приложения. Проведем анализ программы.
Строки 1-4. Загрузка модулей. Загружаются модули IO::Socket и Getopt::Long. Предусматривается также вызов функции tmpnam () из модуля posix.