net: fix inconsistent error values on Read
This change fixes inconsistent error values on Read,
ReadFrom{,UDP,IP,Unix} and ReadMsg{UDP,IP,Unix}.
Updates #4856.
Change-Id: I7de5663094e09be2d78cdb18ce6f1e7ec260888d
Reviewed-on: https://go-review.googlesource.com/8992
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/src/net/net.go b/src/net/net.go
index 439d21c..252a225f 100644
--- a/src/net/net.go
+++ b/src/net/net.go
@@ -121,7 +121,16 @@
if !c.ok() {
return 0, syscall.EINVAL
}
- return c.fd.Read(b)
+ n, err := c.fd.Read(b)
+ if err != nil && err != io.EOF {
+ err = &OpError{Op: "read", 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 n, err
}
// Write implements the Conn Write method.