net: return correct local address for an accepted TCP connection

Fixes #2127.

R=rsc
CC=golang-dev
https://golang.org/cl/4873043
diff --git a/src/pkg/net/fd.go b/src/pkg/net/fd.go
index cd1a21d..fd39d85 100644
--- a/src/pkg/net/fd.go
+++ b/src/pkg/net/fd.go
@@ -591,13 +591,13 @@
 	// 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 @@
 		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
 }