1
0
mirror of https://github.com/golang/go synced 2024-11-17 03:04:44 -07:00

Revert "net: in (*netFD).dial, use the passed in local address if getsockname fails"

This reverts CL 366536

Reason for revert: may have caused #50033 due to an invalid or partially-populated *TCPAddr

Fixes #50033

Change-Id: Ia29ca4116503dba65d56e89caa46ba1c848d421a
Reviewed-on: https://go-review.googlesource.com/c/go/+/369982
Trust: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Bryan Mills 2021-12-07 20:34:46 +00:00
parent 9fe77de3c1
commit 2c85fcd47d
2 changed files with 6 additions and 20 deletions

View File

@ -200,17 +200,9 @@ func TestUnixAndUnixpacketServer(t *testing.T) {
if c == nil {
panic("Dial returned a nil Conn")
}
rc := reflect.ValueOf(c)
if rc.IsNil() {
if rc := reflect.ValueOf(c); rc.Kind() == reflect.Pointer && rc.IsNil() {
panic(fmt.Sprintf("Dial returned a nil %T", c))
}
fd := rc.Elem().FieldByName("fd")
if fd.IsNil() {
panic(fmt.Sprintf("Dial returned a %T with a nil fd", c))
}
if addr := fd.Elem().FieldByName("laddr"); addr.IsNil() {
panic(fmt.Sprintf("Dial returned a %T whose fd has a nil laddr", c))
}
addr := c.LocalAddr()
if addr == nil {
panic(fmt.Sprintf("(%T).LocalAddr returned a nil Addr", c))

View File

@ -156,24 +156,18 @@ func (fd *netFD) dial(ctx context.Context, laddr, raddr sockaddr, ctrlFn func(st
}
}
// Record the local and remote addresses from the actual socket.
// For the local address, use
// 1) the one returned by Getsockname, if that succeeds; or
// 2) the one passed to us as the laddr parameter; or
// 3) nil.
// Get the local address by calling Getsockname.
// For the remote address, use
// 1) the one returned by the connect method, if any; or
// 2) the one from Getpeername, if it succeeds; or
// 3) the one passed to us as the raddr parameter.
var laddrName Addr = laddr
if lsa, err := syscall.Getsockname(fd.pfd.Sysfd); err == nil {
laddrName = fd.addrFunc()(lsa)
}
lsa, _ = syscall.Getsockname(fd.pfd.Sysfd)
if crsa != nil {
fd.setAddr(laddrName, fd.addrFunc()(crsa))
fd.setAddr(fd.addrFunc()(lsa), fd.addrFunc()(crsa))
} else if rsa, _ = syscall.Getpeername(fd.pfd.Sysfd); rsa != nil {
fd.setAddr(laddrName, fd.addrFunc()(rsa))
fd.setAddr(fd.addrFunc()(lsa), fd.addrFunc()(rsa))
} else {
fd.setAddr(laddrName, raddr)
fd.setAddr(fd.addrFunc()(lsa), raddr)
}
return nil
}