Blob Blame History Raw
--- jabber/xmlstream.py	2011-04-07 11:13:18.000000000 +0200
+++ jabber/xmlstream.py	2011-06-22 14:37:49.369669567 +0200
@@ -458,13 +458,34 @@ 
             self._setupComms()
             return
 
-        self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        try:
-            if self._proxy: self._sock.connect((self._proxy['host'], self._proxy['port']))
-            else: self._sock.connect((self._hostIP, self._port))
-        except socket.error, e:
-            self.DEBUG("socket error: "+str(e),DBG_CONN_ERROR)
-            raise
+        if self._proxy:
+            results = socket.getaddrinfo(self._proxy['host'],
+                self._proxy['port'], socket.AF_UNSPEC, socket.SOCK_STREAM)
+        else:
+            results = socket.getaddrinfo(self._hostIP, self._port,
+                socket.AF_UNSPEC, socket.SOCK_STREAM)
+
+        for r in results:
+            af, socktype, proto, canonname, sa = r
+            try:
+                self._sock = socket.socket(af, socktype, proto)
+            except socket.error, msg:
+                self._sock = None
+                continue
+            try:
+                if self._proxy:
+                    self._sock.connect((self._proxy['host'], self._proxy['port']))
+                else:
+                    self._sock.connect((self._hostIP, self._port))
+            except socket.error, e:
+                self._sock.close()
+                self._sock = None
+                self.DEBUG("socket error: "+str(e),DBG_CONN_ERROR)
+                continue
+            break
+
+        if self._sock is None:
+            raise socket.error("Unable to connect to the host and port specified")
 
         if self._connection == TCP_SSL:
             try: