Mercurial > hg > octave-kai > gnulib-hg
changeset 17083:1ba58228acda
poll: fix for systems that can't recv() on a non-socket
* lib/poll.c: if recv returns ENOTSOCK, assume the descriptor
is readable. In this case POLLHUP will not be supported.
* doc/posix-functions/poll.texi: Document this.
Copyright-paperwork-exempt: yes
author | Joachim Schmitz <jojo@schmitz-digital.de> |
---|---|
date | Thu, 13 Sep 2012 08:55:08 +0200 |
parents | 62741e75b7c5 |
children | 723cfa7546c0 |
files | ChangeLog doc/posix-functions/poll.texi lib/poll.c |
diffstat | 3 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-09-13 Joachim Schmitz <jojo@schmitz-digital.de> (tiny change) + Paolo Bonzini <bonzini@gnu.org> + + poll: fix for systems that can't recv() on a non-socket + * lib/poll.c: if recv returns ENOTSOCK, assume the descriptor + is readable. In this case POLLHUP will not be supported. + * doc/posix-functions/poll.texi: Document this. + 2012-09-13 Paolo Bonzini <bonzini@gnu.org> poll/select: document portability problems not fixed by Gnulib.
--- a/doc/posix-functions/poll.texi +++ b/doc/posix-functions/poll.texi @@ -10,7 +10,7 @@ @itemize @item This function is missing on some platforms: -mingw, MSVC 9, BeOS. +mingw, MSVC 9, BeOS, HP NonStop. @item This function doesn't work on special files like @file{/dev/null} and ttys like @file{/dev/tty} on some platforms: @@ -27,4 +27,8 @@ Under Windows, when passing a pipe, Gnulib's @code{poll} replacement might return 0 even before the timeout has passed. Programs using it with pipes can thus busy wait. + +@item +Under HP NonStop, file descriptors other than sockets do not support +POLLHUP; they will return a "readable" status instead. @end itemize
--- a/lib/poll.c +++ b/lib/poll.c @@ -303,6 +303,10 @@ || socket_errno == ECONNABORTED || socket_errno == ENETRESET) happened |= POLLHUP; + /* some systems can't use recv() on non-socket, including HP NonStop */ + else if (socket_errno == ENOTSOCK) + happened |= (POLLIN | POLLRDNORM) & sought; + else happened |= POLLERR; }