1
0
mirror of https://github.com/golang/go synced 2024-09-25 05:20:13 -06:00

net: use original raddr if getpeername fails

Fixes #3838.

R=dave, mikioh.mikioh, rsc
CC=golang-dev
https://golang.org/cl/7511043
This commit is contained in:
Tyler Bunnell 2013-03-13 14:49:24 -04:00 committed by Russ Cox
parent bdf8bf6adc
commit 06cbe78bd7
2 changed files with 19 additions and 0 deletions

View File

@ -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)
}
}

View File

@ -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
}