Наиболее приемлемый подход состоит в выборке дескрипторов файлов, которые могут быть доступны для чтения. Делается это путем вызова дескрипторов с битовой маской POLLIN | POLLHUP | POLLERR. Затем можно передать каждый дескриптор функции sysread () и определить по возвращаемому значению, в каком состоянии находится дескриптор. Аналогичным образом проще всего проверить, какие дескрипторы файлов готовы для записи, с использованием битовой маски POLLOUT | POLLERR. Последующий вызов функции syswrite () покажет, открыт ли дескриптор файла или содержит ошибку.
Методы IO::Poll
Основные методы модуля IO::Poll уже рассмотрены. Ниже даны их определения.
$Poll = IO::Poll->new
Создает новый объект IO::Poll. В отличие от модуля IO::Select, метод new () данного модуля не принимает параметров.
$mask = $poll->mask($ handle[,$mask])
Получает или устанавливает текущую битовую маску событий для указанного дескриптора. Если параметр $masк маски не задан, возвращается текущая маска. В ином случае этот параметр используется для установки маски. Маска, равная 0, полностью удаляет дескриптор из контролируемого набора. Во всех дескрипторах контролируются состояния ошибки (POLLNVAR, POLLHUP, POLLERR) независимо от того, указаны они в битовой маске или нет.
$poll->remove($handle)
Удаляет дескриптор из списка опроса. Этот метод полностью эквивалентен вызову методу mask() с параметром битовой маски, равным 0.
$events = $poll->poll([$timeout]) ,
Находится в состоянии ожидания до тех пор, пока в контролируемых дескрипторах не возникнет какое-либо событие или не истечет время, установленное параметром $timeout, после чего возвращает число дескрипторов, в которых произошли события.