socket: retry on EAGAIN
authorThomasV <thomasv@gitorious>
Mon, 2 Sep 2013 19:16:57 +0000 (21:16 +0200)
committerThomasV <thomasv@gitorious>
Mon, 2 Sep 2013 19:16:57 +0000 (21:16 +0200)
lib/interface.py

index 92b3ad5..26eaebf 100644 (file)
@@ -17,7 +17,7 @@
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
 
-import random, socket, ast, re, ssl
+import random, socket, ast, re, ssl, errno
 import threading, traceback, sys, time, json, Queue
 
 from version import ELECTRUM_VERSION, PROTOCOL_VERSION
@@ -404,10 +404,16 @@ class Interface(threading.Thread):
             try:
                 sent = self.s.send( out )
                 out = out[sent:]
-            except:
-                # this happens when we get disconnected
-                print_error( "Not connected, cannot send" )
-                return None
+            except socket.error,e:
+                if e[0] in (errno.EWOULDBLOCK,errno.EAGAIN):
+                    print_error( "EAGAIN: retrying")
+                    time.sleep(0.1)
+                    continue
+                else:
+                    traceback.print_exc(file=sys.stdout)
+                    # this happens when we get disconnected
+                    print_error( "Not connected, cannot send" )
+                    return None
         return ids