The current code will trigger a POLLERR when KQueue has an EOF. This is an incorrect behavior. It should trigger a POLLHUP like poll or epoll would.
Justin lead me to this bug several days ago on IRC.
My pollset patch for the Event MPM also has this change: http://httpd.apache.org/~pquerna/event-mpm/event-apr_pollset-2004-11-01.patch
-Paul Querna
Index: poll/unix/poll.c =================================================================== RCS file: /home/cvspublic/apr/poll/unix/poll.c,v retrieving revision 1.46 diff -u -r1.46 poll.c --- poll/unix/poll.c 7 Jul 2004 07:40:12 -0000 1.46 +++ poll/unix/poll.c 1 Nov 2004 23:37:25 -0000 @@ -50,7 +50,9 @@ rv |= APR_POLLIN; if (event & EVFILT_WRITE) rv |= APR_POLLOUT; - if (flags & EV_ERROR || flags & EV_EOF) + if (flags & EV_EOF) + rv |= APR_POLLHUP; + if (flags & EV_ERROR) rv |= APR_POLLERR; return rv;