Date: Wed, 24 Feb 2016 17:14:48 +0000 From: Steven Hartland <steven.hartland@multiplay.co.uk> To: Ed Schouten <ed@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r295974 - head/sys/kern Message-ID: <56CDE508.5000903@multiplay.co.uk> In-Reply-To: <201602241710.u1OHAWwM086142@repo.freebsd.org> References: <201602241710.u1OHAWwM086142@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This should really be commented to this effect in the code otherwise someone reading the source will think its a mistake. On 24/02/2016 17:10, Ed Schouten wrote: > Author: ed > Date: Wed Feb 24 17:10:32 2016 > New Revision: 295974 > URL: https://svnweb.freebsd.org/changeset/base/295974 > > Log: > Make asynchronous connection failures on UNIX sockets fail with ECONNRESET. > > While making CloudABI work well on Linux, I discovered that I had a > FreeBSD-ism in one of my unit tests. The test did the following: > > - Create UNIX socket 1, bind it, make it listen. > - Create UNIX socket 2, connect it to UNIX socket 1. > - Close UNIX socket 1. > - Obtain SO_ERROR from socket 2. > > On FreeBSD this returns ECONNABORTED, while on Linux it returns > ECONNRESET. I dug through some of the relevant specifications[1] and it > looks like Linux is all right here. ECONNABORTED should only be returned > when the local connection (socket 2) is aborted; not the peer (socket 1). > > It is of course slightly misleading: the function in which we set this > error is called uipc_abort(), but keep in mind that we're aborting the > peer, thus resetting the local socket. > > [1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html > > Reviewed by: cem > Sponsored by: Nuxi, the Netherlands > Differential Revision: https://reviews.freebsd.org/D5419 > > Modified: > head/sys/kern/uipc_usrreq.c > > Modified: head/sys/kern/uipc_usrreq.c > ============================================================================== > --- head/sys/kern/uipc_usrreq.c Wed Feb 24 16:52:03 2016 (r295973) > +++ head/sys/kern/uipc_usrreq.c Wed Feb 24 17:10:32 2016 (r295974) > @@ -354,7 +354,7 @@ uipc_abort(struct socket *so) > unp2 = unp->unp_conn; > if (unp2 != NULL) { > UNP_PCB_LOCK(unp2); > - unp_drop(unp2, ECONNABORTED); > + unp_drop(unp2, ECONNRESET); > UNP_PCB_UNLOCK(unp2); > } > UNP_PCB_UNLOCK(unp); >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56CDE508.5000903>