On Thu, Mar 08, 2001 at 12:52:31PM +0900, [EMAIL PROTECTED] 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 [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message