git: kernel - make POLLHUP conform better to OpenGroup
Matthew Dillon
dillon at crater.dragonflybsd.org
Fri Aug 13 15:14:17 PDT 2010
commit 9a5d20db2b31ebaf094a3cb60c7342b1026f2947
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Fri Aug 13 15:06:12 2010 -0700
kernel - make POLLHUP conform better to OpenGroup
* The poll() backend now only evaluates EV_EOF for EVFILT_WRITE, and
generates a POLLHUP which is properly mutually exclusive with
POLLWRNORM and POLLOUT.
We do this even for a half-closed (write-side-closed) socket.
* We no longer set POLLHUP for POLLRD* or POLLIN, instead relying on
the userland doing the read() and checking the 0 result (which
userland has always done historically).
EV_EOF for EVFILT_READ cannot be used to set POLLHUP for POLLRD* or
POLLIN because it could indicate a half-closed connection
(read-side-closed) where writing is still allowed, which is a more
common situation on sockets.
We would have to add another EV_ flag to set POLLHUP for POLLRD* or
POLLIN to detect the fully disconnected state. The OpenGroup standard
does allow POLLHUP to be mixed with POLLRD* or POLLIN but for now we
just don't set it at all in that case.
Only a POLLOUT/POLLWRNORM flag request can cause POLLHUP to be set
for now.
Summary of changes:
sys/kern/sys_generic.c | 37 ++++++++++++++++++++++++++++++-------
1 files changed, 30 insertions(+), 7 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/9a5d20db2b31ebaf094a3cb60c7342b1026f2947
--
DragonFly BSD source repository
More information about the Commits
mailing list