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 netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html