You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2009/10/11 16:36:14 UTC

svn commit: r824082 - /qpid/trunk/qpid/python/qpid/driver.py

Author: rhs
Date: Sun Oct 11 14:36:14 2009
New Revision: 824082

URL: http://svn.apache.org/viewvc?rev=824082&view=rev
Log:
catch socket errors on write as well as read

Modified:
    qpid/trunk/qpid/python/qpid/driver.py

Modified: qpid/trunk/qpid/python/qpid/driver.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/driver.py?rev=824082&r1=824081&r2=824082&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/driver.py (original)
+++ qpid/trunk/qpid/python/qpid/driver.py Sun Oct 11 14:36:14 2009
@@ -190,10 +190,10 @@
         log.debug("READ: %r", data)
       else:
         log.debug("ABORTED: %s", self._socket.getpeername())
-        error = ("connection aborted",)
+        error = "connection aborted"
         recoverable = True
     except socket.error, e:
-      error = (e,)
+      error = e
       recoverable = True
 
     if not error:
@@ -214,20 +214,13 @@
           log.debug("RCVD: %r", op)
           op.dispatch(self)
       except VersionError, e:
-        error = (e,)
+        error = e
       except:
         msg = compat.format_exc()
-        error = (msg,)
+        error = msg
 
     if error:
-      self._socket.close()
-      self.reset()
-      if recoverable and self.connection.reconnect:
-        self._timeout = time.time() + 3
-        log.warn("recoverable error: %s" % error)
-        log.warn("sleeping 3 seconds")
-      else:
-        self.connection.error = error
+      self._error(error, recoverable)
     else:
       self.dispatch()
 
@@ -241,9 +234,13 @@
 
   @synchronized
   def writeable(self):
-    n = self._socket.send(self._buf)
-    log.debug("SENT: %r", self._buf[:n])
-    self._buf = self._buf[n:]
+    try:
+      n = self._socket.send(self._buf)
+      log.debug("SENT: %r", self._buf[:n])
+      self._buf = self._buf[n:]
+    except socket.error, e:
+      self._error(e, True)
+      self.connection._waiter.notifyAll()
 
   @synchronized
   def timeout(self):
@@ -251,6 +248,17 @@
     self.dispatch()
     self.connection._waiter.notifyAll()
 
+  def _error(self, err, recoverable):
+    if self._socket is not None:
+      self._socket.close()
+    self.reset()
+    if recoverable and self.connection.reconnect:
+      self._timeout = time.time() + 3
+      log.warn("recoverable error: %s" % err)
+      log.warn("sleeping 3 seconds")
+    else:
+      self.connection.error = (err,)
+
   def write_op(self, op):
     log.debug("SENT: %r", op)
     self._op_enc.write(op)
@@ -372,10 +380,7 @@
       self._timeout = None
     except socket.error, e:
       if self.connection.reconnect:
-        self.reset()
-        self._timeout = time.time() + 3
-        log.warn("recoverable error: %s", e)
-        log.warn("sleeping 3 seconds")
+        self._error(e, True)
         return
       else:
         raise e



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org