add timeout for http sessions
[electrum-server.git] / transports / stratum_tcp.py
index cb0f203..b7176b9 100644 (file)
@@ -12,7 +12,6 @@ class TcpSession(Session):
         Session.__init__(self)
         self._connection = connection
         self.address = address[0]
-        self.version = 'unknown'
         self.name = "TCP session"
 
     def connection(self):
@@ -28,13 +27,15 @@ class TcpSession(Session):
             self._stopped = True
 
     def send_response(self, response):
-        raw_response = json.dumps(response)
+        data = json.dumps(response) + "\n"
         # Possible race condition here by having session
         # close connection?
         # I assume Python connections are thread safe interfaces
         try:
             connection = self.connection()
-            connection.send(raw_response + "\n")
+            while data:
+                l = connection.send(data)
+                data = data[l:]
         except:
             self.stop()
 
@@ -54,6 +55,8 @@ class TcpClientRequestor(threading.Thread):
             if not self.update():
                 break
 
+            self.session.time = time.time()
+
             while self.parse():
                 pass
 
@@ -69,7 +72,7 @@ class TcpClientRequestor(threading.Thread):
 
     def receive(self):
         try:
-            return self.session.connection().recv(1024)
+            return self.session.connection().recv(2048)
         except:
             return ''
 
@@ -122,11 +125,8 @@ class TcpServer(threading.Thread):
         sock.listen(1)
         while not self.shared.stopped():
             session = TcpSession(*sock.accept())
-            client_req = TcpClientRequestor(self.dispatcher, session)
-            client_req.start()
             self.dispatcher.add_session(session)
             self.dispatcher.collect_garbage()
-
-
-
+            client_req = TcpClientRequestor(self.dispatcher, session)
+            client_req.start()