Кроме того, сокеты готовы для записи при следующих условиях.
1) Другой участник соединения закрыл свою сторону соединения. Если сокет подключен и другой участник соединения закрыл соединение или выполнил функцию shutdown (), то метод select() указывает, что сокет готов для записи. При следующей попытке выполнения функции syswrite () вырабатывается исключение PIPE. Если сигналы PIPE игнорируются или обрабатываются, то функция syswrite возвращает значение undef и устанавливает в переменной $! код ошибки EPIРЕ. Локальные каналы ведут себя таким же образом.
2) Инициирована попытка неблокирующего подключения, и эта попытка была завершена. Если сокет TCP является неблокирующим и предпринимается попытка его подключения, то при вызове функции connect () немедленно выполняется возврат, и действия по подключению продолжаются в фоновом режиме. После того как попытка подключения в конечном итоге завершаете (успешно или с ошибкой), метод select () указывает, что сокет готов для записи. Эта ситуация описана более подробно далее.
Исключительные состояния могут возникать только в сокетах, Есть только одно исключительное состояние, которое возникает при наличии в подключенном сокете TCP срочных данных, которые должны быть считаны. Описание того, как применяются срочные данные, также будет приведено далее.
Объединение средств метода select() со стандартными средствами ввода-вывода
При использовании метода select () для мультиплексирования ввода-вывода необходимо тщательно следить за тем, чтобы этот метод не применялся в сочетании с функциями, в которых используется буферизация библиотеки stdio. Это связано с тем, что функции библиотеки stdio сопровождают собственные буфера ввода вывода, независимые от буферов, применяемых операционной системой.