Любой из этих методов может возвратить пустой список, если процесс его выполнения прерван сигналом. Поэтому необходимо всегда проверять, содержит ли возвращенный список дескрипторы файлов, даже если не предусмотрен тайм-аут. Может случиться так, что при получении содержимого страницы возникнет непредвиденная ситуация, которая и приведет к закрытию дескриптора. Использовать данные методы также просто, как найти любимую работу на сайте http://zabota.pro .
Если в программе есть необходимость проверять одновременно дескрипторы чтения и записи, для этого применяется метод select ().
select () — это метод класса, который позволяет получить информацию сразу о нескольких наборах дескрипторов IO::Select. В качестве параметров $ readers, $writers и $except могут быть указаны объекты IO:: Select или значения undef, а необязательный параметр $timeout позволяет задать тайм-аут в секундах. Если какой-либо дескриптор в любом из наборов перешел в стояние готовности для ввода-вывода, метод select () возвращает трехэлементный список, каждый элемент которого представляет собой ссылку на массив, содержащий дескрипторы, готовые для чтения (записи) или имеющие исключительное состояние. Если метод select () завершил свое выполнение по тайм-ауту или был прерван сигналом, прежде чем любой из дескрипторов мог предоставить информацию об изменении своего состояния, он возвращает пустой список.
Исключительными состояниями в сокетах называют не то, что обычно подразумевается под этим термином. Исключительное состояние возникает при получении в сокете TCP срочных данных (информация о том, как создавать и обрабатываются срочные данные будет приведена позже). Ошибка ввода-вывода в сокете не вырабатывает исключительного состояния, а переводит сокет в состояние готовности к чтению и записи. После обнаружения этого состояния можно определить характер ошибки, выполнив чтение или запись в сокет и проверив переменную $!.