После выхода из цикла возвращаются отсортированные ключи хеша. Мы добавили в процесс этот этап, после того как обнаружили, что некоторые операционные системы в ответ на запрос Siocgifconf возвращают одно и то же имя интерфейса несколько раз. Запись имен интерфейсов в хеш обеспечивает получение списка, содержащего только уникальные имена.
Доработка клиента системы интерактивной переписки для поддержки поиска ресурсов
Теперь у нас есть все необходимое для реализации удобного средства в клиенте системы интерактивной переписки UDP разработанной ранее. Если этот клиент запускается без указания сервера назначения, он отправляет по методу широковещательной рассылки свои запросы в порт системы интерактивной переписки любой сети, к которой он подключен. Он ожидает ответ от любого сервера системы интерактивной переписки, который принимает запросы, и если ответ от хоста поступает в течение установленного времени, то клиент подключается к нему и действует, как обычно. В случае получения нескольких ответов клиент подключается к тому серверу, который ответит первым. Это — простая форма поиска ресурсов.
Код дополненного клиента системы интерактивной переписки приведен в листинге ниже. Этот сценарий разработан на основе клиента системы интерактивной переписки, описанного ранее. Те части кода, которые остались без изменений, в листинг не включены. Проведем анализ программы.
Строка 8. Загрузка модуля IO::interface. Модуль IO::Interface применяется для получения широковещательного адреса (адресов) подсети, к которой подключен клиент, поэтому при загрузке этого модуля одновременно импортируются константы флажков интерфейса.
Строка 37. Заданный по умолчанию адрес сервера не применяется. В предыдущих версиях этого клиента по умолчанию применялся адрес localhost, если в командной строке не был указан хост системы интерактивной переписки. В этой версии значение по умолчанию не предусмотрено, и если имя сервера не задано в командной строке, то вместо него используется пустая строка.