svn commit: r295974 - head/sys/kern

Steven Hartland steven.hartland at multiplay.co.uk
Wed Feb 24 17:14:46 UTC 2016


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);
>



More information about the svn-src-head mailing list