net: fix inconsistent error values on Close
This change fixes inconsistent error values on Close, CloseRead and
CloseWrite.
Updates #4856.
Change-Id: I3c4d46ccd7d6e1a2f52d8e75b512f62c533a368d
Reviewed-on: https://go-review.googlesource.com/8994
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/src/net/net.go b/src/net/net.go
index 38375cc..83739b6 100644
--- a/src/net/net.go
+++ b/src/net/net.go
@@ -155,7 +155,16 @@
if !c.ok() {
return syscall.EINVAL
}
- return c.fd.Close()
+ err := c.fd.Close()
+ if err != nil {
+ err = &OpError{Op: "close", Net: c.fd.net, Err: err}
+ if c.fd.raddr != nil {
+ err.(*OpError).Addr = c.fd.raddr
+ } else {
+ err.(*OpError).Addr = c.fd.laddr // for unconnected-mode sockets
+ }
+ }
+ return err
}
// LocalAddr returns the local network address.