ipv6: report a destination address on write error
Change-Id: I226484f6edb0c299487b87fc0384e478969debdc
Reviewed-on: https://go-review.googlesource.com/46233
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/ipv6/helper.go b/ipv6/helper.go
index 80b0dd0..2597401 100644
--- a/ipv6/helper.go
+++ b/ipv6/helper.go
@@ -37,3 +37,21 @@
}
return nil
}
+
+func opAddr(a net.Addr) net.Addr {
+ switch a.(type) {
+ case *net.TCPAddr:
+ if a == nil {
+ return nil
+ }
+ case *net.UDPAddr:
+ if a == nil {
+ return nil
+ }
+ case *net.IPAddr:
+ if a == nil {
+ return nil
+ }
+ }
+ return a
+}
diff --git a/ipv6/payload_cmsg_go1_8.go b/ipv6/payload_cmsg_go1_8.go
index 431cff4..fdc6c39 100644
--- a/ipv6/payload_cmsg_go1_8.go
+++ b/ipv6/payload_cmsg_go1_8.go
@@ -49,7 +49,7 @@
case *net.IPConn:
n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr))
default:
- return 0, &net.OpError{Op: "write", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType}
+ return 0, &net.OpError{Op: "write", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Addr: opAddr(dst), Err: errInvalidConnType}
}
return
}
diff --git a/ipv6/payload_cmsg_go1_9.go b/ipv6/payload_cmsg_go1_9.go
index 4072c58..8f6d02e 100644
--- a/ipv6/payload_cmsg_go1_9.go
+++ b/ipv6/payload_cmsg_go1_9.go
@@ -51,7 +51,7 @@
}
err := c.SendMsg(&m, 0)
if err != nil {
- err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Addr: opAddr(dst), Err: err}
}
return m.N, err
}