Метод handles () возвращает все дескрипторы файлов, в которых произошла смена состояний, указанных в соответствующей битовой маской. В этом примере метод handles () вызывается дважды, но с разными битовыми масками. При первом вызове проверяются дескрипторы, готовые для чтения (POLLIN), закрытые вторым участником соединения (POLLHUP) и содержащие какие-то другие ошибки (POLLERR). Во втором вызове выполняется поиск дескрипторов, готовых для записи. В оставшейся части цикла, показанного в этом примере, обрабатываются дескрипторы в соответствии с требованиями приложения. Таким образом при помощи данной технологии можно наладить диалог между сетевым ресурсом, к примеру, http://admpro.ru/calculator и клиентскими хостами.
Как и select (), функция Poll( ) должна применяться только в сочетании с функциями sysread () и syswrite (). Недопустимо применение функции poll () наряду с процедурами, в которых используется стандартная буферизация ввода вывода (к ним относятся оператор <> или обычные функции read () и write ()).
События
Модуль IO::Poll позволяет контролировать в дескрипторах более широкий набор состояний по сравнению с модулем IO:: Select. Кроме того, он дает возможность не только контролировать наличие в дескрипторе входящих данных и определять его способность принимать исходящие данные без блокировки, но и распознавать появление входящих “высокоприоритетных данных” двух уровней, а также определять условия конца файла и обнаруживать ошибки нескольких различных типов. Смена состояния дескриптора называется “событием”.