Quote:When 'select' says readable, that means it *was* readable at the time 'select' said it was. It has *never* provided a future guarantee of readability. *No* status reporting system call provides future guarantees.
Not true. Once data is queued for the incoming socket, then that file descriptor WILL be readable, until you close that socket. If select() returns a given socket as readable, it WILL NOT BLOCK the next time you call recv(), unless you take explicit action on that socket in the meanwhile.
There may be other kinds of file descriptors (not sockets) where this is not true. However, the interaction between select/recv() is defined to be exactly this, for good reason. Also note that I'm talking about recv(), not read().