From 213ab2c2044e5db0a2a3f2611b36ffce27502666 Mon Sep 17 00:00:00 2001 From: Andrew Bennetts Date: Thu, 13 May 2010 12:56:39 +0200 Subject: [PATCH] Try connecting to each available address family until one succeeds. --- paramiko/transport.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/paramiko/transport.py b/paramiko/transport.py index 758ba37..1b5b72d 100644 --- a/paramiko/transport.py +++ b/paramiko/transport.py @@ -285,15 +285,21 @@ class Transport (threading.Thread): if type(sock) is tuple: # connect to the given (host, port) hostname, port = sock + reason = 'No suitable address family' for (family, socktype, proto, canonname, sockaddr) in socket.getaddrinfo(hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM): if socktype == socket.SOCK_STREAM: af = family addr = sockaddr - break + sock = socket.socket(af, socket.SOCK_STREAM) + try: + sock.connect((hostname, port)) + except socket.error, e: + reason = str(e) + else: + break else: - raise SSHException('No suitable address family for %s' % hostname) - sock = socket.socket(af, socket.SOCK_STREAM) - sock.connect((hostname, port)) + raise SSHException( + 'Unable to connect to %s: %s' % (hostname, reason)) # okay, normal socket-ish flow here... threading.Thread.__init__(self) self.setDaemon(True)