Hi,

When I tried a tiny program which uses gnulib's poll(2) emulation on
MacOS X 10.4, I found a bug.  gnulib's poll(2) uses recv(2) with
MSG_PEEK to support POLLHUP.  However, recv(2) is only applicable to a
socket, not to a file descriptor.

Though I don't know how to fix it, I think it can be by-passed if
(pfd[i].events & POLLHUP) == 0?  Here is the patch

Index: poll.c
===================================================================
RCS file: /sources/gnulib/gnulib/lib/poll.c,v
retrieving revision 1.4
diff -u -r1.4 poll.c
--- poll.c      19 Sep 2005 17:28:14 -0000      1.4
+++ poll.c      11 Aug 2006 07:32:03 -0000
@@ -155,7 +155,8 @@
            {
              /* support for POLLHUP.  An hung up descriptor does not
                 increase the return value! */
-             if (recv (pfd[i].fd, data, 64, MSG_PEEK) == -1)
+             if (pfd[i].events & POLLHUP &&
+                 recv (pfd[i].fd, data, 64, MSG_PEEK) == -1)
                {
                  if (errno == ESHUTDOWN || errno == ECONNRESET
                      || errno == ECONNABORTED || errno == ENETRESET)


Regards,
-- 
Daiki Ueno


Reply via email to