Skip to content

Commit 06cbe78

Browse files
tylerbrsc
authored andcommitted
net: use original raddr if getpeername fails
Fixes #3838. R=dave, mikioh.mikioh, rsc CC=golang-dev https://golang.org/cl/7511043
1 parent bdf8bf6 commit 06cbe78

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/pkg/net/ipraw_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,3 +337,19 @@ func TestIPConnLocalName(t *testing.T) {
337337
}
338338
}
339339
}
340+
341+
func TestIPConnRemoteName(t *testing.T) {
342+
if os.Getuid() != 0 {
343+
t.Skip("skipping test; must be root")
344+
}
345+
346+
raddr := &IPAddr{IP: IPv4(127, 0, 0, 10).To4()}
347+
c, err := DialIP("ip:tcp", &IPAddr{IP: IPv4(127, 0, 0, 1)}, raddr)
348+
if err != nil {
349+
t.Fatalf("DialIP failed: %v", err)
350+
}
351+
defer c.Close()
352+
if !reflect.DeepEqual(raddr, c.RemoteAddr()) {
353+
t.Fatalf("got %#v, expected %#v", c.RemoteAddr(), raddr)
354+
}
355+
}

src/pkg/net/sock_posix.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,8 @@ func socket(net string, f, t, p int, ipv6only bool, ulsa, ursa syscall.Sockaddr,
6767
rsa, _ := syscall.Getpeername(s)
6868
raddr := toAddr(rsa)
6969
fd.setAddr(laddr, raddr)
70+
if fd.raddr == nil {
71+
fd.raddr = toAddr(ursa)
72+
}
7073
return fd, nil
7174
}

0 commit comments

Comments
 (0)