On Sat, 9 Oct 2004 18:38:58 -0700 (PDT)
"Chad N. Tindel" [off-list ref] wrote:
User space code sends a datagram on a blocking socket, and then calls
select() or poll() to wait for the reply.
If you wish the socket not to block, mark the file descriptor
as non-blocking or pass in the appropriate MSG_* flag into
recvmsg().
Select() returning that a filedescriptor is readable does not
guarentee that a blocking socket will not block in the ead
call.
This behavior has been in the Linux kernel for an enourmous
amount of them, the change you are noticing going from EL 3 update
2 to update 3 is that previously we were returning -EAGAIN to
blocking sockets, instead we are properly blocking to wait for
another packet.
There is an enormous and long thread about this topic on the
linux-kernel list, please read there before we duplicate such
a long and tiring thread here.