Skip to content

Commit e15707a

Browse files
committed
Timeout after 10 seconds on address resolution.
Fixes MGO-34, reported by Cailin Nelson.
1 parent db25ae1 commit e15707a

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

cluster.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -395,11 +395,14 @@ func (cluster *mongoCluster) server(addr string, tcpaddr *net.TCPAddr) *mongoSer
395395
}
396396

397397
func resolveAddr(addr string) (*net.TCPAddr, error) {
398-
tcpaddr, err := net.ResolveTCPAddr("tcp", addr)
398+
// This hack allows having a timeout on resolution.
399+
conn, err := net.DialTimeout("udp", addr, 10 * time.Second)
399400
if err != nil {
400-
log("SYNC Failed to resolve ", addr, ": ", err.Error())
401-
return nil, err
401+
log("SYNC Failed to resolve server address: ", addr)
402+
return nil, errors.New("failed to resolve server address: " + addr)
402403
}
404+
tcpaddr := (*net.TCPAddr)(conn.RemoteAddr().(*net.UDPAddr))
405+
conn.Close()
403406
if tcpaddr.String() != addr {
404407
debug("SYNC Address ", addr, " resolved as ", tcpaddr.String())
405408
}

0 commit comments

Comments
 (0)