mirror of
https://github.com/golang/go
synced 2024-11-20 02:24:43 -07:00
net: handle hangup in read on Plan 9
On Plan 9, when closing a TCP connection, we write the "hangup" string to the TCP ctl file. The next read on the TCP data file will return an error like "/net/tcp/18/data: Hangup", while in Go, we expect to return io.EOF. This change makes Read to return io.EOF when an error string containing "Hangup" is returned. Change-Id: I3f71ed543704190b441cac4787488a77f46d88a1 Reviewed-on: https://go-review.googlesource.com/22149 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: David du Colombier <0intro@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
f81ae3b22c
commit
262814467e
@ -77,6 +77,9 @@ func (fd *netFD) Read(b []byte) (n int, err error) {
|
||||
}
|
||||
defer fd.readUnlock()
|
||||
n, err = fd.data.Read(b)
|
||||
if isHangup(err) {
|
||||
err = io.EOF
|
||||
}
|
||||
if fd.net == "udp" && err == io.EOF {
|
||||
n = 0
|
||||
err = nil
|
||||
@ -179,3 +182,7 @@ func setReadBuffer(fd *netFD, bytes int) error {
|
||||
func setWriteBuffer(fd *netFD, bytes int) error {
|
||||
return syscall.EPLAN9
|
||||
}
|
||||
|
||||
func isHangup(err error) bool {
|
||||
return err != nil && stringsHasSuffix(err.Error(), "Hangup")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user