tuse ping time to determine if we are disconnected - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit efa09729712a84afb59b73e666acc4fd20c7f62d DIR parent 517f649532daa0a3b9acad19fbd6254c8e4be3a9 HTML Author: ThomasV <thomasv@gitorious> Date: Tue, 29 Jul 2014 17:57:03 +0200 use ping time to determine if we are disconnected Diffstat: M lib/interface.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) --- DIR diff --git a/lib/interface.py b/lib/interface.py t@@ -70,6 +70,9 @@ class TcpInterface(threading.Thread): self.message_id = 0 self.unanswered_requests = {} + # are we waiting for a pong? + self.is_ping = False + # parse server self.server = server self.host, self.port, self.protocol = self.server.split(':') t@@ -117,6 +120,7 @@ class TcpInterface(threading.Thread): if method == 'server.version': self.server_version = result + self.is_ping = False return queue.put((self, {'method':method, 'params':params, 'result':result, 'id':_id})) t@@ -254,7 +258,8 @@ class TcpInterface(threading.Thread): with self.lock: try: self.pipe.send({'id':self.message_id, 'method':method, 'params':params}) - except socket.error: + except socket.error, e: + print_error("socked error:", self.server, e) self.is_connected = False return self.unanswered_requests[self.message_id] = method, params, _id, queue t@@ -301,8 +306,14 @@ class TcpInterface(threading.Thread): while self.is_connected: # ping the server with server.version if time.time() - t > 60: - self.send_request({'method':'server.version', 'params':[ELECTRUM_VERSION, PROTOCOL_VERSION]}) - t = time.time() + if self.is_ping: + print_error("ping timeout", self.server) + self.is_connected = False + break + else: + self.send_request({'method':'server.version', 'params':[ELECTRUM_VERSION, PROTOCOL_VERSION]}) + self.is_ping = True + t = time.time() try: response = self.pipe.get() except util.timeout: