diff options
Diffstat (limited to 'libgo/go/net/fd_plan9.go')
-rw-r--r-- | libgo/go/net/fd_plan9.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libgo/go/net/fd_plan9.go b/libgo/go/net/fd_plan9.go index 32766f53b58..cec88609d06 100644 --- a/libgo/go/net/fd_plan9.go +++ b/libgo/go/net/fd_plan9.go @@ -171,6 +171,14 @@ func (fd *netFD) Close() error { if !fd.ok() { return syscall.EINVAL } + if fd.net == "tcp" { + // The following line is required to unblock Reads. + // For some reason, WriteString returns an 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") + } err := fd.ctl.Close() if fd.data != nil { if err1 := fd.data.Close(); err1 != nil && err == nil { |