Date: Thu, 8 Mar 2001 13:00:14 -0800 From: "Jonathan Graehl" <jonathan@graehl.org> To: "Wietse Venema" <wietse@porcupine.org> Cc: "Freebsd-Net" <freebsd-net@freebsd.org> Subject: RE: [itojun@iijlab.net: accept(2) behavior with tcp RST right after handshake] Message-ID: <NCBBLOALCKKINBNNEDDLKECLDMAA.jonathan@graehl.org> In-Reply-To: <20010308180048.CC09DBC06D@spike.porcupine.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> > Data CAN be lost if the TCP connection is RST. It has nothing to > > do with the ordering of accept() with respect to close(). > > Please educate me: how would RST come into this discussion at all? > The client does connect() write() close(), there is no forced > connection termination involved at all. > > Wietse If you set the SO_LINGER socket option, a close() may generate RST and discard socket buffers/TCP state, as opposed to the standard behavior of keeping the data around and resending until the data and the FIN are acknowleged by the other end. I am not sure why this is supposed to be a good idea, though, but obviously, if you set that option, you are unconcerned about data loss, or you have already guarded against it with application-level acknowledgment. Let's agree: it is okay for accept to return an error code indicating the connection has already been terminated, so long as any data sent by the client (such that the client had every indication that it was received) is still available for the acceptor to read. -Jon 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?NCBBLOALCKKINBNNEDDLKECLDMAA.jonathan>