{"thread":{"id":"31473","subject":"RE: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket","startedAt":"2012-09-07T15:43:41Z","lastAt":"2012-09-08T13:53:43Z","messageCount":3,"participants":["Joachim Schmitz","Erik Faye-Lund"],"isPatch":true,"patchVersion":4,"patchTotal":4},"messages":[{"id":"198527","messageId":"004201cd8d0f$8e9ad4f0$abd07ed0$@schmitz-digital.de","threadId":"31473","inReplyTo":null,"subject":"RE: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket","fromName":"Joachim Schmitz","fromEmail":"jojo@schmitz-digital.de","sentAt":"2012-09-07T15:43:41Z","receivedAt":"2012-09-07T15:43:41Z","isPatch":true,"sender":{"key":"jojo@schmitz-digital.de","avatar":"https://avatars.githubusercontent.com/u/1786669?v=4"},"body":"This way it gets added to gnulib too.\n\nSigned-off-by: Joachim Schmitz <jojo@schmitz-digital.de>\n---\n compat/poll/poll.c | 5 +++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/compat/poll/poll.c b/compat/poll/poll.c\nindex e4b8319..10a204e 100644\n--- a/compat/poll/poll.c\n+++ b/compat/poll/poll.c\n@@ -306,6 +306,10 @@ compute_revents (int fd, int sought, fd_set *rfds, fd_set *wfds, fd_set *efds)\n \t       || socket_errno == ECONNABORTED || socket_errno == ENETRESET)\n \thappened |= POLLHUP;\n \n+      /* some systems can't use recv() on non-socket, including HP NonStop */\n+      else if (/* (r == -1) && */ socket_errno == ENOTSOCK)\n+\thappened |= (POLLIN | POLLRDNORM) & sought;\n+\n       else\n \thappened |= POLLERR;\n     }\n-- \n1.7.12\n"},{"id":"198564","messageId":"CABPQNSY1+3X3LE19mSm2398Kr9EvOxbmsoRLzo4fFTytiA3B+Q@mail.gmail.com","threadId":"31473","inReplyTo":"004201cd8d0f$8e9ad4f0$abd07ed0$@schmitz-digital.de","subject":"Re: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket","fromName":"Erik Faye-Lund","fromEmail":"kusmabite@gmail.com","sentAt":"2012-09-08T11:31:47Z","receivedAt":"2012-09-08T11:31:47Z","isPatch":true,"sender":{"key":"kusmabite@gmail.com","avatar":"https://avatars.githubusercontent.com/u/47073?v=4"},"body":"On Fri, Sep 7, 2012 at 5:43 PM, Joachim Schmitz <jojo@schmitz-digital.de> wrote:\n> This way it gets added to gnulib too.\n>\n> Signed-off-by: Joachim Schmitz <jojo@schmitz-digital.de>\n> ---\n>  compat/poll/poll.c | 5 +++++\n>  1 file changed, 4 insertions(+)\n>\n> diff --git a/compat/poll/poll.c b/compat/poll/poll.c\n> index e4b8319..10a204e 100644\n> --- a/compat/poll/poll.c\n> +++ b/compat/poll/poll.c\n> @@ -306,6 +306,10 @@ compute_revents (int fd, int sought, fd_set *rfds, fd_set *wfds, fd_set *efds)\n>                || socket_errno == ECONNABORTED || socket_errno == ENETRESET)\n>         happened |= POLLHUP;\n>\n> +      /* some systems can't use recv() on non-socket, including HP NonStop */\n> +      else if (/* (r == -1) && */ socket_errno == ENOTSOCK)\n\nWhy add commented-out code (\"(r == -1) && \")?\n"},{"id":"198565","messageId":"001b01cd8dc9$5c6ca7a0$1545f6e0$@schmitz-digital.de","threadId":"31473","inReplyTo":"CABPQNSY1+3X3LE19mSm2398Kr9EvOxbmsoRLzo4fFTytiA3B+Q@mail.gmail.com","subject":"RE: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket","fromName":"Joachim Schmitz","fromEmail":"jojo@schmitz-digital.de","sentAt":"2012-09-08T13:53:43Z","receivedAt":"2012-09-08T13:53:43Z","isPatch":true,"sender":{"key":"jojo@schmitz-digital.de","avatar":"https://avatars.githubusercontent.com/u/1786669?v=4"},"body":"> From: Erik Faye-Lund [mailto:kusmabite@gmail.com]\n> Sent: Saturday, September 08, 2012 1:32 PM\n> To: Joachim Schmitz\n> Cc: Junio C Hamano; git@vger.kernel.org\n> Subject: Re: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket\n> \n> On Fri, Sep 7, 2012 at 5:43 PM, Joachim Schmitz <jojo@schmitz-digital.de> wrote:\n> > This way it gets added to gnulib too.\n> >\n> > Signed-off-by: Joachim Schmitz <jojo@schmitz-digital.de>\n> > ---\n> >  compat/poll/poll.c | 5 +++++\n> >  1 file changed, 4 insertions(+)\n> >\n> > diff --git a/compat/poll/poll.c b/compat/poll/poll.c\n> > index e4b8319..10a204e 100644\n> > --- a/compat/poll/poll.c\n> > +++ b/compat/poll/poll.c\n> > @@ -306,6 +306,10 @@ compute_revents (int fd, int sought, fd_set *rfds, fd_set *wfds, fd_set *efds)\n> >                || socket_errno == ECONNABORTED || socket_errno == ENETRESET)\n> >         happened |= POLLHUP;\n> >\n> > +      /* some systems can't use recv() on non-socket, including HP NonStop */\n> > +      else if (/* (r == -1) && */ socket_errno == ENOTSOCK)\n> \n> Why add commented-out code (\"(r == -1) && \")?\n\nI'm not really sure whether it may be needed, esp. for Mac OS X, where en ENOTSOCK is expected from a recv() but then dealt with by\nan ioctl(), which does not resert socket_errno, but does set r to something not -1. And wouldn't need this code path?\nThere's some similar code a few lines up, which too has that part commented out:\n\n      /* If the event happened on an unconnected server socket,\n         that's fine. */\n      else if (r > 0 || ( /* (r == -1) && */ socket_errno == ENOTCONN))\n        happened |= (POLLIN | POLLRDNORM) & sought;\n\nBye, Jojo\n"}]}