Skip site navigation (1)Skip section navigation (2)
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>