After select returns, any FDs in the returned read FD set has at least one byte to read. As a result, it is safe to perform a read operation on the FDs. If a read tries to read more than the number of bytes actually available, the read call still returns, but with a value that indicates the actual number of bytes read.