С другой стороны, если в вызывающей процедуре будет вызван метод read () нового объекта сеанса, то в этом объекте может отсутствовать возвращаемая информация, например, с сайта http://purepassion.ru/catalog/obuv_dlya_pole_dance/ , представляющего магазин продажи обуви для Pole Dance. Однако поскольку сокет является неблокирующим, это практически не создает никакой проблемы. Метод read (), возвратит значение 0Е0, а вызывающая процедура должна проигнорировать эти результаты чтения и повторить свою попытку позднее.
Классы IO::LineBufferedSet и IO::LineBufferedSessionData
Если приложить некоторые дополнительные усилия, можно создать подклассы классов IO::SessionSet и IO::SessionData для получения классои IO::LineBuf feredSet и IO::LineBufferedSessionData, предназначенных для построчных операций ввода-вывода. Класс IO::LineBufferedSet обеспечивает обратную совместимость с классом IO::SessionSet. Возвращаемые им объекты сеансов можно применять для ввода потоков байтов, вызывая метод read () для выборки произвольных фрагментов данных. Однако эти объекты можно также использовать для построчного ввода, вызывая метод getline () для чтения данных по одной строке за один раз.
В модуле IO::LineBufferedSet реализованы следующие модифицированные методы.
$set = IO::LineBufferedSet->new([$listen])
Создает новый объект IO::LineBuf feredSet. Как и в методе IO::SessionSet->new (), при задании необязательного параметра с обозначением приемного сокета выполняется контроль сокета на наличие входящих соединений.
$sessions = $set->wait({$timeout])
Как и в методе IO::SessionSet->wait (), метод select () обращается к контролируемым дескрипторам файлов и возвращает соответствующие им объекты сеансов, готовые для чтения. Однако возвращенные объекты сеансов представляют собой объекты IO::LineBufferedSessionData, которые поддерживают построчный ввод-вывод.