From: Davide Libenzi <davidel@xxxxxxxxxxxxxxx>
Date: Sun, 8 Jan 2006 16:02:10 -0800 (PST)
But if and hangup happened with some data (data + FIN), they won't
receive any more events for the Linux poll subsystem (and epoll,
when using the event triggered interface), so they are forced to
issue an extra read() after the loop to detect the EOF
condition. Besides from the extra read() overhead, the code does not
come exactly pretty.
The extra last read is always necessary, it's an error synchronization
barrier. Did you know that?
If a partial read or write hits an error, the successful amount of
bytes read or written before the error occurred is returned. Then any
subsequent read or write will report the error immediately.