Re: UDP recvmsg blocks after select(), 2.6 bug?

From: Martijn Sipkema
Date: Sun Oct 17 2004 - 14:47:09 EST


From: "Buddy Lucas" <buddy.lucas@xxxxxxxxx>
> On Sun, 17 Oct 2004 20:58:39 +0100, Martijn Sipkema <martijn@xxxxxxxxxx> wrote:
> > >
> > > But then I am one of those who thinks it's sane to check for
> > > EWOULDBLOCK on a nonblocking socket after blocking in select().
> >
> > A POSIX comliant implementation would never do this.
>
> Here's your own quote, from a couple of hundred mails ago:
>
> > According to POSIX:
>
> > A descriptor shall be considered ready for reading when a call to an
> > input function with O_NONBLOCK clear would not block, whether or not
> > the function would transfer data successfully.
>
> You concluded from this that, if select() says a descriptor is
> readable, the subsequent recvmsg() must not block. The point is, from
> your quote I cannot deduct anything but: a recvmsg() on a descriptor
> that is readable must not block -- which makes perfect sense.
>
> But unless POSIX also says something about the conservability of
> "readability" of descriptors, specifically in between select() and
> recvmsg(), your conclusion is just wrong.

But with the current Linux implementation it is possible that a call to select()
returns while a call to recvmsg() would have blocked, and that is not
correct according to POSIX.

And I indeed read this as meaning that the first recvmsg() after the select()
may not block.

> > > Let's just document this and move on to something more important.
> >
> > It actually _is_ important. Just implement select() and recvmsg() as
> > described in the standard.
>
> I am very glad Linux makes sane decisions while trying to adhere to
> the standards as much as possible.

I don't think this is ``trying to adhere to the standards''... not by a long shot.


--ms

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/