Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's a file descriptor's "exception"?

When one calls select() asking which file descriptors have "exceptions" waiting, what does that mean?

How does one trigger one of these "exceptions"?

If anyone can point me to a nice explanation, that'd be awesome. I've been googling and can't find a thing.

like image 906
Verdagon Avatar asked Mar 30 '13 03:03

Verdagon


2 Answers

Short form: exceptional situations occur when a TCP socket recieves out of band data.

If you read the select manual page, you will find a reference to another supplementary manual page called select_tut with the explanation:

exceptfds

This set is watched for "exceptional conditions". In practice, only one such exceptional condition is common: the availability of out-of-band (OOB) data for reading from a TCP socket. See recv(2), send(2), and tcp(7) for more details about OOB data. (One other less common case where select(2) indicates an exceptional condition occurs with pseudo-terminals in packet mode; see tty_ioctl(4).) After select() has returned, exceptfds will be cleared of all file descriptors except for those for which an exceptional condition has occurred.

like image 78
jmkeyes Avatar answered Sep 28 '22 01:09

jmkeyes


Indeed there seems to be very little information on this. Thankfully there's an existing question with a very good answer.

In the case of Linux, for example, it can denote out-of-band data being received on a stream socket, or "a state change occuring on a pseudoterminal slave connected to a master that is in packet mode" (TLPI 63.2.1).

like image 32
Jorge Israel Peña Avatar answered Sep 28 '22 00:09

Jorge Israel Peña