diff options
| author | Tyler Bunnell <tylerbunnell@gmail.com> | 2013-03-13 14:49:24 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2013-03-13 14:49:24 -0400 |
| commit | 06cbe78bd77789afb46b597466bcecf73c25d6d2 (patch) | |
| tree | 08faa494417f47ced92906c773c18afc12df1fd3 /src | |
| parent | bdf8bf6adc956719a3a224f32c1ca6e6df77dbac (diff) | |
| download | go-06cbe78bd77789afb46b597466bcecf73c25d6d2.tar.xz | |
net: use original raddr if getpeername fails
Fixes #3838.
R=dave, mikioh.mikioh, rsc
CC=golang-dev
https://golang.org/cl/7511043
Diffstat (limited to 'src')
| -rw-r--r-- | src/pkg/net/ipraw_test.go | 16 | ||||
| -rw-r--r-- | src/pkg/net/sock_posix.go | 3 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/pkg/net/ipraw_test.go b/src/pkg/net/ipraw_test.go index 3cf8297e43..fa1a535b7f 100644 --- a/src/pkg/net/ipraw_test.go +++ b/src/pkg/net/ipraw_test.go @@ -337,3 +337,19 @@ func TestIPConnLocalName(t *testing.T) { } } } + +func TestIPConnRemoteName(t *testing.T) { + if os.Getuid() != 0 { + t.Skip("skipping test; must be root") + } + + raddr := &IPAddr{IP: IPv4(127, 0, 0, 10).To4()} + c, err := DialIP("ip:tcp", &IPAddr{IP: IPv4(127, 0, 0, 1)}, raddr) + if err != nil { + t.Fatalf("DialIP failed: %v", err) + } + defer c.Close() + if !reflect.DeepEqual(raddr, c.RemoteAddr()) { + t.Fatalf("got %#v, expected %#v", c.RemoteAddr(), raddr) + } +} diff --git a/src/pkg/net/sock_posix.go b/src/pkg/net/sock_posix.go index 74b671c895..2ebde87998 100644 --- a/src/pkg/net/sock_posix.go +++ b/src/pkg/net/sock_posix.go @@ -67,5 +67,8 @@ func socket(net string, f, t, p int, ipv6only bool, ulsa, ursa syscall.Sockaddr, rsa, _ := syscall.Getpeername(s) raddr := toAddr(rsa) fd.setAddr(laddr, raddr) + if fd.raddr == nil { + fd.raddr = toAddr(ursa) + } return fd, nil } |
