Иногда считается, что кроме fds требуется для обнаружения ошибок, но это ошибочное представление. Ошибки будут помечены в readfds . Хотя POSIX требует этого (и даже вызывает параметр errorfds ), от ОС зависит, отмечены ли ошибки и в , за исключением fds . Действительно, этот параметр необходим только в том случае, если вы заботитесь о исключительных условиях , но только в редких случаях возникает необходимость их обнаружения.
То, что считается исключительным условием, зависит от типа файлового дескриптора, но на сегодняшний день наиболее распространенным является использование сокета TCP, где он указывает, что внеполосные данные доступны для чтения с использованием recv()
с MSG_OOB
флаг. Однако внеполосные данные TCP имеют ряд особенностей (например, только 1 байт может быть непогашенным), и в результате они используются редко.
В последних версиях Linux кроме файловой системы можно использовать для обнаружения изменений определенных атрибутов sysfs. Текущее значение атрибута можно прочитать, прочитав соответствующий файл в /sys
, а select()
в дескрипторе файла будет помечать кромеfds при изменении атрибута. Однако в настоящее время это работает только для некоторых атрибутов и для изменений монтирования (/proc/mounts
).
Кроме того, некоторые драйверы устройств помечают определенные специфические для устройства условия, используя кромеfds .