mirror of
https://github.com/golang/go.git
synced 2025-05-30 03:41:33 +00: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:
parent
bdf8bf6adc
commit
06cbe78bd7
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -67,5 +67,8 @@ func socket(net string, f, t, p int, ipv6only bool, ulsa, ursa syscall.Sockaddr,
|
|||||||
rsa, _ := syscall.Getpeername(s)
|
rsa, _ := syscall.Getpeername(s)
|
||||||
raddr := toAddr(rsa)
|
raddr := toAddr(rsa)
|
||||||
fd.setAddr(laddr, raddr)
|
fd.setAddr(laddr, raddr)
|
||||||
|
if fd.raddr == nil {
|
||||||
|
fd.raddr = toAddr(ursa)
|
||||||
|
}
|
||||||
return fd, nil
|
return fd, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user