aboutsummaryrefslogtreecommitdiff
path: root/src/pkg
diff options
context:
space:
mode:
authorMikio Hara <mikioh.mikioh@gmail.com>2014-04-29 12:37:16 +0900
committerMikio Hara <mikioh.mikioh@gmail.com>2014-04-29 12:37:16 +0900
commit7e41abbc6b9f00f84374c69f3acb63b56fcf4728 (patch)
tree9b1826ef8d65d547379663619eda1426da17c85b /src/pkg
parent4cc708ae1dc5fd6b8a04ee884e34303b81ddd223 (diff)
downloadgo-7e41abbc6b9f00f84374c69f3acb63b56fcf4728.tar.xz
net: make WriteTo, WriteToIP and WriteMsgIP fail when IPConn is already connected
This CL tries to fill the gap between Linux and other Unix-like systems in the same way UDPConn and UnixConn already did. Fixes #7887. LGTM=iant R=iant CC=golang-codereviews https://golang.org/cl/97810043
Diffstat (limited to 'src/pkg')
-rw-r--r--src/pkg/net/iprawsock_posix.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/pkg/net/iprawsock_posix.go b/src/pkg/net/iprawsock_posix.go
index 26fc06e1b6..bbb3f3ed66 100644
--- a/src/pkg/net/iprawsock_posix.go
+++ b/src/pkg/net/iprawsock_posix.go
@@ -133,6 +133,9 @@ func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
+ if c.fd.isConnected {
+ return 0, &OpError{Op: "write", Net: c.fd.net, Addr: addr, Err: ErrWriteToConnected}
+ }
if addr == nil {
return 0, &OpError{Op: "write", Net: c.fd.net, Addr: nil, Err: errMissingAddress}
}
@@ -162,6 +165,9 @@ func (c *IPConn) WriteMsgIP(b, oob []byte, addr *IPAddr) (n, oobn int, err error
if !c.ok() {
return 0, 0, syscall.EINVAL
}
+ if c.fd.isConnected {
+ return 0, 0, &OpError{Op: "write", Net: c.fd.net, Addr: addr, Err: ErrWriteToConnected}
+ }
if addr == nil {
return 0, 0, &OpError{Op: "write", Net: c.fd.net, Addr: nil, Err: errMissingAddress}
}