]> Cypherpunks repositories - gostls13.git/commitdiff
net: return correct local address for an accepted TCP connection
authorMikio Hara <mikioh.mikioh@gmail.com>
Tue, 16 Aug 2011 20:53:09 +0000 (16:53 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 16 Aug 2011 20:53:09 +0000 (16:53 -0400)
Fixes #2127.

R=rsc
CC=golang-dev
https://golang.org/cl/4873043

src/pkg/net/fd.go

index cd1a21dc361b2bf0b3e56551f16c64c77f875eec..fd39d858c3540b34a31e1164ea5af9dd11b4c176 100644 (file)
@@ -591,13 +591,13 @@ func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (nfd *netFD, err os.
        // because we have put fd.sysfd into non-blocking mode.
        syscall.ForkLock.RLock()
        var s, e int
-       var sa syscall.Sockaddr
+       var rsa syscall.Sockaddr
        for {
                if fd.closing {
                        syscall.ForkLock.RUnlock()
                        return nil, os.EINVAL
                }
-               s, sa, e = syscall.Accept(fd.sysfd)
+               s, rsa, e = syscall.Accept(fd.sysfd)
                if e != syscall.EAGAIN {
                        break
                }
@@ -616,7 +616,8 @@ func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (nfd *netFD, err os.
                syscall.Close(s)
                return nil, err
        }
-       nfd.setAddr(fd.laddr, toAddr(sa))
+       lsa, _ := syscall.Getsockname(nfd.sysfd)
+       nfd.setAddr(toAddr(lsa), toAddr(rsa))
        return nfd, nil
 }