I wonder if someone can tell me what Linux does here. First: it seems to me Posix specification are such that the behaviour on closing a socket is unspecified, except if the socket is blocking and SO_LINGER is used to specify a timeout. In that case the close blocks until written data is sent down the wire or the nominated timeout expires. IMHO this specification is unacceptable because it makes reliable non-blocking socket operations impossible. However I may misunderstand the spec. Second: I have observed that in non-blocking mode, Linux discards written data without sending it down the wire. As above: this seems unacceptable, although it conforms to Posix 'in vaccuuo' :) Can anyone tell me what Linux *actually* does? A related question: is there any reason to suppose closing for a different thread to the writing (assuming a proper locked exchange of control) would make any difference? [We use a separate epoll-based writer thread] What *should* happen IMHO is that SO_LINGER should cause a non-blocking socket close to linger for the timeout specified trying to write the data down the wire, after which it is free to give up. -- John Skaller <skaller at users dot sf dot net> Felix, successor to C++: http://felix.sf.net - To unsubscribe from this list: send the line "unsubscribe linux-net" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html