summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2009-10-11 14:36:14 +0000
committerRafael H. Schloming <rhs@apache.org>2009-10-11 14:36:14 +0000
commitbc6700c7076f05bdc57ef5e7e09f9f3b7ff5d096 (patch)
tree4c35c22e37080eb3ca41409048df821fb3dd736d /python
parent1c2199293f985f4682afdc5450f2095d95dc0829 (diff)
downloadqpid-python-bc6700c7076f05bdc57ef5e7e09f9f3b7ff5d096.tar.gz
catch socket errors on write as well as read
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@824082 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python')
-rw-r--r--python/qpid/driver.py43
1 files changed, 24 insertions, 19 deletions
diff --git a/python/qpid/driver.py b/python/qpid/driver.py
index a7a8b13819..13861aa215 100644
--- a/python/qpid/driver.py
+++ b/python/qpid/driver.py
@@ -190,10 +190,10 @@ class Driver:
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 @@ class Driver:
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 @@ class Driver:
@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 @@ class Driver:
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 @@ class Driver:
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