@@ -130,17 +130,22 @@ def getPort(self):
130
130
def connect (self ,server = None ):
131
131
""" Try to connect to the given host/port. Does not lookup for SRV record.
132
132
Returns non-empty string on success. """
133
+ if not server : server = self ._server
133
134
try :
134
- if not server : server = self ._server
135
- self ._sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
136
- self ._sock .connect ((server [0 ], int (server [1 ])))
137
- self ._send = self ._sock .sendall
138
- self ._recv = self ._sock .recv
139
- self .DEBUG ("Successfully connected to remote host %s" % `server` ,'start' )
140
- return 'ok'
141
- except socket .error , (errno , strerror ):
135
+ for res in socket .getaddrinfo (server [0 ], int (server [1 ]), 0 , socket .SOCK_STREAM ):
136
+ af , socktype , proto , canonname , sa = res
137
+ try :
138
+ self ._sock = socket .socket (af , socktype , proto )
139
+ self ._sock .connect (sa )
140
+ self ._send = self ._sock .sendall
141
+ self ._recv = self ._sock .recv
142
+ self .DEBUG ("Successfully connected to remote host %s" % `server` ,'start' )
143
+ return 'ok'
144
+ except socket .error , (errno , strerror ):
145
+ if self ._sock is not None : self ._sock .close ()
142
146
self .DEBUG ("Failed to connect to remote host %s: %s (%s)" % (`server` , strerror , errno ),'error' )
143
- except : pass
147
+ except socket .gaierror , (errno , strerror ):
148
+ self .DEBUG ("Failed to lookup remote host %s: %s (%s)" % (`server` , strerror , errno ),'error' )
144
149
145
150
def plugout (self ):
146
151
""" Disconnect from the remote server and unregister self.disconnected method from
0 commit comments