Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Mar 2001 22:06:05 -0600
From:      Jonathan Lemon <jlemon@flugsvamp.com>
To:        itojun@iijlab.net
Cc:        Wietse Venema <wietse@porcupine.org>, Jonathan Lemon <jlemon@flugsvamp.com>, Arjan.deVet@adv.iae.nl, net@freebsd.org, postfix-users@postfix.org
Subject:   Re: [itojun@iijlab.net: accept(2) behavior with tcp RST right after handshake]
Message-ID:  <20010307220605.Q41963@prism.flugsvamp.com>
In-Reply-To: <6251.984023551@coconut.itojun.org>
References:  <20010307212035.8170EBC070@spike.porcupine.org> <6251.984023551@coconut.itojun.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Mar 08, 2001 at 12:52:31PM +0900, itojun@iijlab.net wrote:
> 
> >Several parts of Postfix do: connect() write() close(), where the
> >close() may happen before the server has accept()ed the connection.
> >Due to an incompatible change in FreeBSD 4.2-STABLE, this causes
> >accept() after close() to fail. The already written data is lost.
> >This is a bad incompatible change.
> 
> 	see SUSv2 and XNET 5.2 spec for accept(), and Stevens (unix network
> 	programming vol 1 2nd ed) section 5.11.
> 	http://www.opengroup.org/onlinepubs/007908799/xns/accept.html
> 
> 	4.3BSD behavior was very wrong (described in Stevens).
> 
> 	old freebsd behavior (return 0-length sockaddr) was also wrong,
> 	it kills a set of applications including sendmail and BIND910.
> 
> 	new freebsd behavior (ECONNABORTED) is at least SUSv2 conformant,
> 	and I expect it to be the behavior of other stacks.


The crucial part of Wietse's message (which he didn't mention in
the first email) is that he's using this setup on unix-domain sockets.
These probably have semantics which are slightly different.

I believe the correct thing to do at this point is push the
IS_DISCONNECTED test down to each protocol's accept routine,
instead of short-circuiting it in soaccept.  It looks like the
short-circuit test was added in uipc_socket.c:1.41 in the NetBSD
sources, which we brought over.  I'm not sure why this test is
actually needed, though.
--
Jonathan

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010307220605.Q41963>