From: Andries Brouwer <aebr@win.tue.nl>
To: Joris van Rantwijk <joris@eljakim.nl>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: UDP recvmsg blocks after select(), 2.6 bug?
Date: Wed, 6 Oct 2004 21:30:53 +0200 [thread overview]
Message-ID: <20041006193053.GC4523@pclin040.win.tue.nl> (raw)
In-Reply-To: <Pine.LNX.4.58.0410061955230.7057@eljakim.netsystem.nl>
On Wed, Oct 06, 2004 at 08:04:29PM +0200, Joris van Rantwijk wrote:
> > On Mer, 2004-10-06 at 15:52, Joris van Rantwijk wrote:
> > > My understanding of POSIX is limited, but it seems to me that a read call
> > > must never block after select just said that it's ok to read from the
> > > descriptor. So any such behaviour would be a kernel bug.
Alan answers - and I don't like his answer a bit:
> > Select indicates there may be data. That is all - it might also be an
> > error, it might turn out to be wrong.
> >
> > You should always combine select with nonblocking I/O
Joris replies again:
> Sorry about my wrongly blaming the kernel. I do think this issue shows hat
> the select(2) manual needs fixing.
It may need fixing in the sense that it must point out that the Linux kernel
might not conform to POSIX in its handling of select on sockets.
We now not only have "man 2 select", but also "man 3p select".
This is the POSIX text:
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. (The function might return data, an end-of-
file indication, or an error other than one indicating
that it is blocked, and in each of these cases the
descriptor shall be considered ready for reading.)
As far as I can interpret these sentences, Linux does not conform.
Andries
Neil Horman wrote:
>> I think you could also pass the MSG_ERRQUEUE flag to the recvfrom call
>> and receive the errored frame, eliminating the case where errored frames
>> might cause you to block on a read after a good return from a select call.
davem wrote:
>> There is no such guarentee.
>> Incorrect UDP checksums could cause the read data to
>> be discarded. We do the copy into userspace and checksum
>> computation in parallel. This is totally legal and we've
>> been doing it since 2.4.x first got released.
ahu wrote:
>> This can happen, and is fully to be expected. For a host of reasons the
>> packet might not in fact appear. Whenever using select for non-blocking IO
>> always set your sockets to non-blocking as well.
>> One of the legitimate reasons is the reception of packets which, on copying,
>> turn out to have a bad checksum.
>> Stevens has a section on this, recommended reading.
Reference?
next prev parent reply other threads:[~2004-10-06 19:33 UTC|newest]
Thread overview: 191+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-06 14:52 Joris van Rantwijk
2004-10-06 15:01 ` David S. Miller
2004-10-06 15:13 ` Chris Friesen
2004-10-06 15:15 ` Richard B. Johnson
2004-10-06 15:21 ` David S. Miller
2004-10-06 15:29 ` Richard B. Johnson
2004-10-06 15:42 ` David S. Miller
2004-10-06 15:57 ` Chris Friesen
2004-10-06 15:44 ` Lars Marowsky-Bree
2004-10-07 1:16 ` Paul Jakma
2004-10-07 7:10 ` Chris Friesen
2004-10-07 11:53 ` Paul Jakma
2004-10-07 13:32 ` Martijn Sipkema
2004-10-07 12:53 ` Paul Jakma
2004-10-07 13:12 ` Richard B. Johnson
2004-10-07 14:07 ` Martijn Sipkema
2004-10-07 13:19 ` Paul Jakma
2004-10-07 13:36 ` Paul Jakma
2004-10-07 15:01 ` Jean-Sebastien Trottier
2004-10-07 16:20 ` Chris Friesen
2004-10-07 18:20 ` Hua Zhong
2004-10-07 18:33 ` Chris Friesen
2004-10-07 22:41 ` Martijn Sipkema
2004-10-07 21:49 ` Chris Friesen
2004-10-07 22:00 ` David S. Miller
2004-10-07 22:24 ` Chris Friesen
2004-10-07 22:26 ` David S. Miller
2004-10-07 22:39 ` Chris Friesen
2004-10-07 22:42 ` David S. Miller
2004-10-07 23:27 ` Chris Friesen
2004-10-08 0:04 ` Ben Greear
2004-10-08 2:51 ` Mark Mielke
2004-10-08 3:39 ` David S. Miller
2004-10-08 3:48 ` Mark Mielke
2004-10-08 3:59 ` David S. Miller
2004-10-07 23:19 ` Martijn Sipkema
2004-10-07 22:24 ` David S. Miller
2004-10-07 22:33 ` Alan Curry
2004-10-07 22:42 ` Mark Mielke
2004-10-07 22:47 ` David S. Miller
2004-10-07 23:00 ` Mark Mielke
2004-10-07 23:07 ` David S. Miller
2004-10-08 6:10 ` Theodore Ts'o
2004-10-08 15:20 ` Mark Mielke
2004-10-08 0:37 ` Lee Revell
2004-10-07 22:46 ` Hua Zhong
2004-10-07 22:48 ` David S. Miller
2004-10-07 23:17 ` Martijn Sipkema
2004-10-07 13:45 ` Alan Cox
2004-10-07 16:32 ` Martijn Sipkema
2004-10-07 14:50 ` Alan Cox
2004-10-07 21:58 ` mmap specification - was: ... select specification Andries Brouwer
2004-10-07 22:17 ` Chris Wedgwood
2004-10-07 22:34 ` Andries Brouwer
2004-10-07 22:32 ` Kyle Moffett
2004-10-07 22:46 ` Andries Brouwer
2004-10-07 23:30 ` Kyle Moffett
2004-10-08 9:19 ` Andries Brouwer
2004-10-09 21:10 ` Martijn Sipkema
2004-10-07 13:48 ` UDP recvmsg blocks after select(), 2.6 bug? Alan Cox
2004-10-07 14:57 ` Richard B. Johnson
2004-10-07 15:18 ` Adam Heath
2004-10-07 16:39 ` Martijn Sipkema
2004-10-07 16:09 ` Mark Mielke
2004-10-07 17:18 ` Chris Friesen
2004-10-06 15:31 ` Chris Friesen
2004-10-06 15:41 ` David S. Miller
2004-10-06 16:07 ` Richard B. Johnson
2004-10-06 16:57 ` Neil Horman
2004-10-06 15:59 ` Paul Jackson
2004-10-06 16:35 ` Martijn Sipkema
2004-10-06 15:30 ` Chris Friesen
2004-10-06 15:09 ` Richard B. Johnson
2004-10-06 15:18 ` bert hubert
2004-10-06 16:41 ` Alan Cox
2004-10-06 18:04 ` Joris van Rantwijk
2004-10-06 19:30 ` Andries Brouwer [this message]
2004-10-06 19:23 ` Alan Cox
2004-10-06 22:08 ` Martijn Sipkema
2004-10-06 20:25 ` Alan Cox
2004-10-06 22:15 ` Andries Brouwer
2004-10-06 22:32 ` David S. Miller
2004-10-06 23:25 ` YOSHIFUJI Hideaki / 吉藤英明
2004-10-06 23:11 ` Willy Tarreau
2004-10-06 19:43 ` Hua Zhong
2004-10-06 19:54 ` Chris Friesen
2004-10-06 19:59 ` Hua Zhong
2004-10-06 20:10 ` Chris Friesen
2004-10-06 21:45 ` Martijn Sipkema
2004-10-06 23:35 ` David S. Miller
2004-10-06 20:06 ` David S. Miller
2004-10-06 20:18 ` Chris Friesen
2004-10-06 20:26 ` Hua Zhong
2004-10-06 20:38 ` Andries Brouwer
2004-10-06 20:58 ` Joris van Rantwijk
2004-10-06 22:29 ` David S. Miller
2004-10-07 16:08 ` Adrian Phillips
2004-10-06 20:06 ` Olivier Galibert
2004-10-06 23:35 ` David S. Miller
2004-10-07 0:19 ` Olivier Galibert
2004-10-07 0:29 ` David S. Miller
2004-10-07 10:56 ` Martijn Sipkema
2004-10-08 6:41 ` Willy Tarreau
2004-10-08 15:27 ` Mark Mielke
2004-10-15 22:42 ` Robert White
2004-10-15 23:33 ` David Schwartz
2004-10-16 0:59 ` Chris Friesen
2004-10-16 2:35 ` Mark Mielke
2004-10-16 4:23 ` David Schwartz
2004-10-16 4:35 ` Mark Mielke
2004-10-16 4:58 ` David Schwartz
2004-10-16 6:25 ` Mark Mielke
2004-10-16 21:44 ` Roland Kuhn
2004-10-17 0:06 ` Mark Mielke
2004-10-17 0:30 ` David Schwartz
2004-10-17 14:47 ` Mark Mielke
2004-10-17 0:28 ` David Schwartz
2004-10-17 13:35 ` Lars Marowsky-Bree
2004-10-17 14:17 ` Buddy Lucas
2004-10-17 15:05 ` Mark Mielke
2004-10-17 15:40 ` Buddy Lucas
2004-10-17 16:13 ` Lee Revell
2004-10-17 17:35 ` Jesper Juhl
2004-10-17 18:04 ` Buddy Lucas
2004-10-17 18:06 ` Lars Marowsky-Bree
2004-10-17 18:21 ` Buddy Lucas
2004-10-17 20:04 ` Martijn Sipkema
2004-10-17 20:08 ` Lars Marowsky-Bree
2004-10-17 17:35 ` Martijn Sipkema
2004-10-17 17:33 ` Buddy Lucas
2004-10-17 19:58 ` Martijn Sipkema
2004-10-17 19:33 ` Buddy Lucas
2004-10-17 20:11 ` Lars Marowsky-Bree
2004-10-17 20:25 ` Buddy Lucas
2004-10-17 20:42 ` Martijn Sipkema
2004-10-17 20:02 ` Buddy Lucas
2004-10-17 18:53 ` David Schwartz
2004-10-17 19:26 ` Hua Zhong
2004-10-17 20:32 ` Martijn Sipkema
2004-10-17 19:21 ` Hua Zhong
2004-10-17 17:22 ` Lars Marowsky-Bree
2004-10-17 17:54 ` Buddy Lucas
2004-10-17 18:05 ` Lars Marowsky-Bree
2004-10-17 18:06 ` Mark Mielke
2004-10-20 21:31 ` H. Peter Anvin
2004-10-20 21:58 ` Chris Friesen
2004-10-20 22:00 ` H. Peter Anvin
2004-10-20 22:12 ` Chris Friesen
2004-10-20 23:16 ` David Schwartz
2004-10-21 1:03 ` Chris Friesen
2004-10-21 1:38 ` David Schwartz
2004-10-21 3:01 ` Michael Clark
2004-10-21 3:52 ` Michael Clark
2004-10-21 4:10 ` H. Peter Anvin
2004-10-21 5:06 ` Chris Friesen
2004-10-21 5:11 ` H. Peter Anvin
2004-10-21 5:50 ` Chris Friesen
2004-10-21 5:58 ` H. Peter Anvin
2004-10-21 15:18 ` Chris Friesen
2004-10-21 6:14 ` Michael Clark
2004-10-17 14:52 ` Mark Mielke
2004-10-16 18:25 ` Andries Brouwer
2004-10-17 0:28 ` David Schwartz
2004-10-17 12:22 ` Andries Brouwer
2004-10-16 10:24 ` Willy Tarreau
2004-10-16 13:21 ` Mark Mielke
2004-10-18 22:25 ` Robert White
2004-10-06 20:41 ` Neil Horman
2004-10-06 22:27 ` Chris Friesen
2004-10-06 23:32 ` Neil Horman
2004-10-06 23:36 ` David S. Miller
2004-10-07 19:31 ` David Schwartz
2004-10-07 22:36 ` Martijn Sipkema
2004-10-08 0:19 ` David Schwartz
2004-10-09 19:21 ` Martijn Sipkema
2004-10-09 18:28 ` David Schwartz
2004-10-09 18:49 ` Mark Mielke
2004-10-09 21:00 ` Martijn Sipkema
2004-10-09 22:59 ` Mark Mielke
2004-10-06 15:30 Dan Kegel
2004-10-07 4:50 Dan Kegel
2004-10-07 8:04 ` bert hubert
2004-10-07 8:28 ` Adam Heath
2004-10-07 10:38 ` Martijn Sipkema
2004-10-07 10:07 ` Adam Heath
2004-10-07 11:29 ` Martijn Sipkema
2004-10-07 18:16 linux
2004-10-09 12:07 ` Colin Phipps
[not found] <fa.haprsoi.8k8kbk@ifi.uio.no>
[not found] ` <fa.isqjio8.ok2coo@ifi.uio.no>
2004-10-09 13:24 ` Bodo Eggert
2004-10-19 1:21 John Pearson
2004-10-19 13:50 ` Colin Phipps
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20041006193053.GC4523@pclin040.win.tue.nl \
--to=aebr@win.tue.nl \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=joris@eljakim.nl \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®