Если обнаружены объекты сеансов с полными строками, допускающими чтение, то метод wait () их немедленно возвращает. В ином случае он обращается к унаследованной версии метода wait () (вызывая метод своего суперкласса SUPER::wait ()), который проверяет с помощью метода select () наличие потока данных, готовых для чтения, во всех дескрипторах файлов низкого уровня.
Применение модуля IO::SessionSet дескрипторами файлов, отличными от сокетов.
В заключение рассматривается последнее приложение модуля IO::SessionSet неблокирующая версия клиента gab. Этот клиент работает аналогично клиентам описанным ранее, но в нем для чередования операций ввода-вывода применяются мультипроцессные или многопоточные методы.
В этом клиентском сценарии показано, как работать с однонаправленными дескрипторами, такими как STDIN и STDOUT, и как использовать подпрограмму обратного вызова choke () для предотвращения возможности беспредельного роста внутреннего буфера записи. Проведем анализ программы.
Строки 1-8. Инициализация сценария и обработка параметров командной строки. Выполнение сценария начинается с вызова соответствующих модулей. Для просмотра сообщений с кодом состояния, выдаваемых модулем IO::SessionSet в процессе его управления потоком данных, попробуйте установить переменную $IO::SessionSet::debug равной истинному значению.
Строки 9-13. Создание объектов IO::Socket и IO::SessionSet. Создается объект IO::Socket::INET, подключенный к указанному хосту и порту, и вызывается метод IO::SessionSet->new() для создания нового объекта SessionSet. В отличие от предыдущих примеров, приемный сокет, который мог бы контролироваться с помощью объекта IO::SessionSet, отсутствует, поэтому методу new () не передаются параметры.