Что такое дескриптор файла "исключение"?

Когда вы вызываете select(), спрашиваете, в каких файловых дескрипторах есть "исключения", что это значит?

Как вызвать одно из этих "исключений"?

Если кто-нибудь может указать мне на хорошее объяснение, это было бы потрясающе. Я искал Google и ничего не нашел.

Ответ 1

Краткая форма: исключительные ситуации возникают, когда сокет TCP получает внеполосные данные.

Если вы прочитаете страницу select вручную, вы найдете ссылку на другую дополнительную страницу руководства под названием select_tut с объяснением:

exceptfds

За этим набором наблюдаются "исключительные условия". На практике распространено только одно такое исключительное условие: наличие внеполосных (OOB) данных для чтения из сокета TCP. Дополнительную информацию об OOB-данных см. В разделе recv (2), send (2) и tcp (7). (Еще один менее распространенный случай, когда select (2) указывает на исключительное условие, возникающее с псевдотерминалами в пакетном режиме, см. Tty_ioctl (4).) После того, как функция select() вернулась, exceptfds будет очищен от всех файловых дескрипторов, за исключением тех, которые для который имеет исключительное условие.

Ответ 2

На самом деле, похоже, очень мало информации об этом. К счастью, существует существующий вопрос с очень хорошим ответом.

Например, в случае Linux он может обозначать внеполосные данные, принимаемые в поточном сокете, или "изменение состояния, происходящее на псевдотерминальном подчиненном устройстве, подключенном к ведущему устройству, находящемуся в пакетном режиме" (TLPI 63.2.1 ).