mirror of
https://github.com/golang/go.git
synced 2024-09-30 06:47:04 +00:00
net: add diagnostic to try to catch selfConnect bug earlier
TBR=dsymonds R=golang-dev CC=golang-dev https://golang.org/cl/5683057
This commit is contained in:
parent
ce837b308f
commit
2155a0408e
@ -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)
|
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
|
// TCP has a rarely used mechanism called a 'simultaneous connection' in
|
||||||
// which Dial("tcp", addr1, addr2) run on the machine at addr1 can
|
// which Dial("tcp", addr1, addr2) run on the machine at addr1 can
|
||||||
// connect to a simultaneous Dial("tcp", addr2, addr1) run on the machine
|
// 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++ {
|
for i := 0; i < 2 && err == nil && laddr == nil && selfConnect(fd); i++ {
|
||||||
fd.Close()
|
fd.Close()
|
||||||
fd, err = internetSocket(net, laddr.toAddr(), raddr.toAddr(), syscall.SOCK_STREAM, 0, "dial", sockaddrToTCP)
|
fd, err = internetSocket(net, laddr.toAddr(), raddr.toAddr(), syscall.SOCK_STREAM, 0, "dial", sockaddrToTCP)
|
||||||
|
checkRaddr("after close")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user