Commit 3d1ae4b7 authored by David du Colombier's avatar David du Colombier

net: close the connection gracefully on Plan 9

Previously, we used to write the "hangup" message to
the TCP connection control file to be able to close
a connection, while waking up the readers.

The "hangup" message closes the TCP connection with a
RST message. This is a problem when closing a connection
consecutively to a write, because the reader may not have
time to acknowledge the message before the connection is
closed, resulting in loss of data.

We use a "close" message, newly implemented in the Plan 9
kernel to be able to close a TCP connection gracefully with a FIN.

Updates #15464.

Change-Id: I2050cc72fdf7a350bc6c9128bae7d14af11e599c
Reviewed-on: https://go-review.googlesource.com/31271
Run-TryBot: David du Colombier <0intro@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent a431bdc7
......@@ -128,7 +128,7 @@ func (fd *netFD) Close() error {
// "write /net/tcp/39/listen: inappropriate use of fd"
// But without it, Reads on dead conns hang forever.
// See Issue 9554.
fd.ctl.WriteString("hangup")
fd.ctl.WriteString("close")
}
err := fd.ctl.Close()
if fd.data != nil {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment