aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/net/fd_plan9.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/net/fd_plan9.go')
-rw-r--r--libgo/go/net/fd_plan9.go8
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 {