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:30:07 UTC 2010
The following reply was made to PR kern/146845; it has been noted by GNATS.
From: Mikolaj Golub <to.my.trociny at gmail.com>
To: "Lavrentiev\, Anton \(NIH\/NLM\/NCBI\) \[C\]" <lavr at ncbi.nlm.nih.gov>
Cc: "Robert N. M. Watson" <rwatson at FreeBSD.org>, freebsd-net at FreeBSD.org, bug-followup at FreeBSD.org
Subject: Re: kern/146845: [libc] close(2) returns error 54 (connection reset by peer) wrongly
Date: Fri, 28 May 2010 12:26:33 +0300
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