]> Cypherpunks repositories - gostls13.git/commitdiff
net: add diagnostic to try to catch selfConnect bug earlier
authorRob Pike <r@golang.org>
Tue, 21 Feb 2012 03:53:07 +0000 (14:53 +1100)
committerRob Pike <r@golang.org>
Tue, 21 Feb 2012 03:53:07 +0000 (14:53 +1100)
TBR=dsymonds

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

src/pkg/net/tcpsock_posix.go

index f972043eeb8b172676acd21cbcd95717020045ab..28d170730805a30e3d76cf1f3319b71ca6accf16 100644 (file)
@@ -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 {