Кроме того, метод select () указывает, что сокет готов для чтения, при следующих условиях.
1) Приемный сокет содержит входящий запрос на установление соединения. Метод select () указывает, что приемный сокет готов для чтения, если он содержит ожидающий обработки входящий запрос на установление соединения. Метод accept () возвращает подключенный сокет без блокировки. Использование данного метода также просто, как купить наклейки в интернет магазине.
2) Сокет UDP содержит входящую дейтаграмму. Сокет готов для чтения, если в нем применяется протокол UDP и содержится входящая дейтаграмма, доступная для чтения. Функция recv () возвращает дейтаграмму без блокировки, Протокол UDP рассматривается позже.
Дескрипторы файлов, каналы и сокеты в целом готовы для записи при следующих условиях.
1) В выходном буфере есть место для новых данных. Если в выходном буфере дескриптора файла (передающем буфере в случае сокетов) есть свободное место объемом хотя бы один байт, то запись с помощью функции syswrite () одного байта будет выполнена успешно без блокировки. Однако вызов функции syswrite () для записи более одного байта все еще может быть заблокирован, если объем записываемых данных превышает объем свободного места. Для сокетов это правило может быть изменено путем установки нижней отметки передающего буфера.
Если дескриптор файла отмечен как неблокирующий, то функция syswrite всегда выполняется успешно, без блокировки, и возвращает число фактически записанных байтов. Неблокирующий ввод-вывод будет рассматриваться позже.
2) Дескриптор файла содержит ошибку, ожидающую обработки. В результате возникновения любой ошибки ввода-вывода в дескрипторе файла метод select () указывает, что дескриптор готов для записи, а функция syswrite () не блокируется, а возвращает значение undef в качестве результата своего выполнения. Переменная $! содержит код ошибки.