]> Cypherpunks repositories - gostls13.git/commitdiff
net: use original raddr if getpeername fails
authorTyler Bunnell <tylerbunnell@gmail.com>
Wed, 13 Mar 2013 18:49:24 +0000 (14:49 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 13 Mar 2013 18:49:24 +0000 (14:49 -0400)
Fixes #3838.

R=dave, mikioh.mikioh, rsc
CC=golang-dev
https://golang.org/cl/7511043

src/pkg/net/ipraw_test.go
src/pkg/net/sock_posix.go

index 3cf8297e43f1191732b1933bb0850375113b9408..fa1a535b7f9f1b728810bd8b13064e94281331e8 100644 (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)
+       }
+}
index 74b671c895c39ef0781c83c1753aa37e4e008d6b..2ebde87998142238dcae517bec4a0d1e951899e0 100644 (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
 }