# RE: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket

3 messages from 2012-09-07 to 2012-09-08. Participants: Joachim Schmitz, Erik Faye-Lund.
Thread: https://gitlist.dev/t/31473

## Joachim Schmitz, 2012-09-07 15:43

Subject: RE: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket
Message-ID: <004201cd8d0f$8e9ad4f0$abd07ed0$@schmitz-digital.de>
URL: https://gitlist.dev/e/004201cd8d0f%248e9ad4f0%24abd07ed0%24%40schmitz-digital.de

```
This way it gets added to gnulib too.

Signed-off-by: Joachim Schmitz <jojo@schmitz-digital.de>
---
 compat/poll/poll.c | 5 +++++
 1 file changed, 4 insertions(+)

diff --git a/compat/poll/poll.c b/compat/poll/poll.c
index e4b8319..10a204e 100644
--- a/compat/poll/poll.c
+++ b/compat/poll/poll.c
@@ -306,6 +306,10 @@ compute_revents (int fd, int sought, fd_set *rfds, fd_set *wfds, fd_set *efds)
 	       || socket_errno == ECONNABORTED || socket_errno == ENETRESET)
 	happened |= POLLHUP;
 
+      /* some systems can't use recv() on non-socket, including HP NonStop */
+      else if (/* (r == -1) && */ socket_errno == ENOTSOCK)
+	happened |= (POLLIN | POLLRDNORM) & sought;
+
       else
 	happened |= POLLERR;
     }
-- 
1.7.12

```

## Erik Faye-Lund, 2012-09-08 11:31

Subject: Re: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket
Message-ID: <CABPQNSY1+3X3LE19mSm2398Kr9EvOxbmsoRLzo4fFTytiA3B+Q@mail.gmail.com>
URL: https://gitlist.dev/e/CABPQNSY1%2B3X3LE19mSm2398Kr9EvOxbmsoRLzo4fFTytiA3B%2BQ%40mail.gmail.com
In-Reply-To: <004201cd8d0f$8e9ad4f0$abd07ed0$@schmitz-digital.de>

```
On Fri, Sep 7, 2012 at 5:43 PM, Joachim Schmitz <jojo@schmitz-digital.de> wrote:
> This way it gets added to gnulib too.
>
> Signed-off-by: Joachim Schmitz <jojo@schmitz-digital.de>
> ---
>  compat/poll/poll.c | 5 +++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/compat/poll/poll.c b/compat/poll/poll.c
> index e4b8319..10a204e 100644
> --- a/compat/poll/poll.c
> +++ b/compat/poll/poll.c
> @@ -306,6 +306,10 @@ compute_revents (int fd, int sought, fd_set *rfds, fd_set *wfds, fd_set *efds)
>                || socket_errno == ECONNABORTED || socket_errno == ENETRESET)
>         happened |= POLLHUP;
>
> +      /* some systems can't use recv() on non-socket, including HP NonStop */
> +      else if (/* (r == -1) && */ socket_errno == ENOTSOCK)

Why add commented-out code ("(r == -1) && ")?

```

## Joachim Schmitz, 2012-09-08 13:53

Subject: RE: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket
Message-ID: <001b01cd8dc9$5c6ca7a0$1545f6e0$@schmitz-digital.de>
URL: https://gitlist.dev/e/001b01cd8dc9%245c6ca7a0%241545f6e0%24%40schmitz-digital.de
In-Reply-To: <CABPQNSY1+3X3LE19mSm2398Kr9EvOxbmsoRLzo4fFTytiA3B+Q@mail.gmail.com>

```
> From: Erik Faye-Lund [mailto:kusmabite@gmail.com]
> Sent: Saturday, September 08, 2012 1:32 PM
> To: Joachim Schmitz
> Cc: Junio C Hamano; git@vger.kernel.org
> Subject: Re: [PATCH v4 4/4] make poll() work on platforms that can't recv() on a non-socket
> 
> On Fri, Sep 7, 2012 at 5:43 PM, Joachim Schmitz <jojo@schmitz-digital.de> wrote:
> > This way it gets added to gnulib too.
> >
> > Signed-off-by: Joachim Schmitz <jojo@schmitz-digital.de>
> > ---
> >  compat/poll/poll.c | 5 +++++
> >  1 file changed, 4 insertions(+)
> >
> > diff --git a/compat/poll/poll.c b/compat/poll/poll.c
> > index e4b8319..10a204e 100644
> > --- a/compat/poll/poll.c
> > +++ b/compat/poll/poll.c
> > @@ -306,6 +306,10 @@ compute_revents (int fd, int sought, fd_set *rfds, fd_set *wfds, fd_set *efds)
> >                || socket_errno == ECONNABORTED || socket_errno == ENETRESET)
> >         happened |= POLLHUP;
> >
> > +      /* some systems can't use recv() on non-socket, including HP NonStop */
> > +      else if (/* (r == -1) && */ socket_errno == ENOTSOCK)
> 
> Why add commented-out code ("(r == -1) && ")?

I'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
an ioctl(), which does not resert socket_errno, but does set r to something not -1. And wouldn't need this code path?
There's some similar code a few lines up, which too has that part commented out:

      /* If the event happened on an unconnected server socket,
         that's fine. */
      else if (r > 0 || ( /* (r == -1) && */ socket_errno == ENOTCONN))
        happened |= (POLLIN | POLLRDNORM) & sought;

Bye, Jojo

```
