kern/146845: [libc] close(2) returns error 54 (connection reset by peer) wrongly

Mikolaj Golub to.my.trociny at gmail.com
Fri May 28 09:26:41 UTC 2010


On Fri, 28 May 2010 04:40:03 GMT Lavrentiev, Anton (NIH/NLM/NCBI) [C] wrote:

 LA>  IMHO, it is not, unfortunately, a solution:  it seems to clear ECONNRESET
 LA>  blindly and w/o distinguishing the situation when the remote end closes the
 LA>  connection prematurely (i.e. before acknowledging all data written from the
 LA>  local end) -- and that qualifies for the true "connection reset by peer"
 LA>  from close()...

I am not very familiar with the socket/tcp code but it looks for me that it
might not make any difference.

I can be wrong here but the situation you have described as true "connection
reset by peer" seems to have the following path in the code:

soclose() -> sodisconnect() -> tcp_usr_disconnect() -> tcp_disconnect()

But tcp_disconnect() does not return error, so we will not have ECONNRESET
error in any case.

May be you have a good test suite to reproduce this situation? :-) 

-- 
Mikolaj Golub


More information about the freebsd-net mailing list