From: Rob Pike Date: Tue, 21 Feb 2012 03:53:07 +0000 (+1100) Subject: net: add diagnostic to try to catch selfConnect bug earlier X-Git-Tag: weekly.2012-02-22~63 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2155a0408eb50ce8ae47d5b3b53c3363498cd716;p=gostls13.git net: add diagnostic to try to catch selfConnect bug earlier TBR=dsymonds R=golang-dev CC=golang-dev https://golang.org/cl/5683057 --- diff --git a/src/pkg/net/tcpsock_posix.go b/src/pkg/net/tcpsock_posix.go index f972043eeb..28d1707308 100644 --- a/src/pkg/net/tcpsock_posix.go +++ b/src/pkg/net/tcpsock_posix.go @@ -230,6 +230,13 @@ func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error) { fd, err := internetSocket(net, laddr.toAddr(), raddr.toAddr(), syscall.SOCK_STREAM, 0, "dial", sockaddrToTCP) + checkRaddr := func(s string) { + if err == nil && fd.raddr == nil { + panic("nil raddr in DialTCP: " + s) + } + } + checkRaddr("early") + // TCP has a rarely used mechanism called a 'simultaneous connection' in // which Dial("tcp", addr1, addr2) run on the machine at addr1 can // connect to a simultaneous Dial("tcp", addr2, addr1) run on the machine @@ -250,6 +257,7 @@ func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error) { for i := 0; i < 2 && err == nil && laddr == nil && selfConnect(fd); i++ { fd.Close() fd, err = internetSocket(net, laddr.toAddr(), raddr.toAddr(), syscall.SOCK_STREAM, 0, "dial", sockaddrToTCP) + checkRaddr("after close") } if err != nil {