diff options
author | Mikio Hara <mikioh.mikioh@gmail.com> | 2014-04-29 12:37:16 +0900 |
---|---|---|
committer | Mikio Hara <mikioh.mikioh@gmail.com> | 2014-04-29 12:37:16 +0900 |
commit | 085253eca212149c0ac1314f41333df5f74a8bfe (patch) | |
tree | 5139f563866116e64d63d81dc75c40e90c3ed1c6 /src | |
parent | 722b402003b3844a5c7fb6941fb1b9494add15a6 (diff) | |
download | go-085253eca212149c0ac1314f41333df5f74a8bfe.tar.gz |
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 issue 7887.
LGTM=iant
R=iant
CC=golang-codereviews
https://codereview.appspot.com/97810043
Diffstat (limited to 'src')
-rw-r--r-- | src/pkg/net/iprawsock_posix.go | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/pkg/net/iprawsock_posix.go b/src/pkg/net/iprawsock_posix.go index 26fc06e1b..bbb3f3ed6 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} } |