From: Stefan Rompf <[email protected]>
Date: Thu, 6 Dec 2007 11:56:48 +0100
> Am Donnerstag, 6. Dezember 2007 09:53 schrieb David Miller:
>
> > > I think the words "shall fail" and "immediately" are quite clear.
> >
> > They are, but the context in which they apply is vague.
>
> "socket is connection-mode" => SOCK_STREAM
I meant whether "immediately" mean in reference to socket
state or includes auxiliary things like route lookups.
When you do a non-blocking write on a socket, things like
memory allocations can block, potentially for a long time.
It is an example where there are definite boundaries to where
the non-blocking'ness applies.
And therefore it is not so cut and dry and you present this
issue.
> The reason why I'm pushing this issue another time is that I know quite a
> bit about system level application development. A very typical design pattern
> for non-naive single or multi threaded programs is that they set all
> communication sockets to be nonblocking and use a select()/epoll() based loop
> to dispatch IO. This often includes initiating a TCP connect() and
> asynchronously waiting for it to finish or fail from the main loop.
>
> The dangerous situation here is that in 99% of all cases things will just work
> because the phase 2 SA exists. In 0.8%, the SA will be established in <1 sec.
> However, in the rest of time the server application that you have considered
> to be stable will end up sleeping with all threads in a connect() call that
> is supposed to return immediatly.
And that connect() call can hang for a long time due to any memory
allocation done in the connect() path.
You are not avoiding blocking by setting O_NONBLOCK on the socket, it
is quite foolhardy to think that it does so unilaterally.
And that's why this is a grey area. Why is waiting for memory
allocation on a O_NONBLOCK socket OK but waiting for IPSEC route
resolution is not?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]