tMerge pull request #414 from 3M3RY/IPv6 - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 5e4e5005decd9816f2b843a247ae6d37f9201987 DIR parent 9484c2931d89b999f5d27bf2bad0236e5afe9c50 HTML Author: ThomasV <thomasv1@gmx.de> Date: Wed, 13 Nov 2013 11:50:44 -0800 Merge pull request #414 from 3M3RY/IPv6 IPv6 support Diffstat: M lib/interface.py | 44 ++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 16 deletions(-) --- DIR diff --git a/lib/interface.py b/lib/interface.py t@@ -315,18 +315,25 @@ class Interface(threading.Thread): is_new = True # get server certificate. # Do not use ssl.get_server_certificate because it does not work with proxy - s = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) - try: - s.connect((self.host, self.port)) - except Exception: - # print_error("failed to connect", self.host, self.port) - return + for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM): + try: + s = socket.socket( res[0], socket.SOCK_STREAM ) + s.connect(res[4]) + except: + s = None + continue + + try: + s = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3, cert_reqs=ssl.CERT_NONE, ca_certs=None) + except ssl.SSLError, e: + s = None + continue + break - try: - s = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3, cert_reqs=ssl.CERT_NONE, ca_certs=None) - except ssl.SSLError, e: - print_error("SSL error:", self.host, e) + if s == None: + print_error("SSL error retrieving SSL certificate:", self.host, e) return + dercert = s.getpeercert(True) s.close() cert = ssl.DER_cert_to_PEM_cert(dercert) t@@ -339,14 +346,19 @@ class Interface(threading.Thread): else: is_new = False + for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM): + try: + s = socket.socket( res[0], socket.SOCK_STREAM ) + s.settimeout(2) + s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) - s = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) - s.settimeout(2) - s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) + s.connect(res[4]) + except: + s = None + continue + break - try: - s.connect(( self.host.encode('ascii'), int(self.port))) - except Exception: + if s == None: print_error("failed to connect", self.host, self.port) return