Merge pull request #697 from benoitc/issue/694

Issue/694
This commit is contained in:
Randall Leeds 2014-02-23 12:26:03 -08:00
commit a01a224e66
2 changed files with 10 additions and 7 deletions

View File

@ -112,6 +112,7 @@ class AsyncWorker(base.Worker):
if resp and resp.headers_sent: if resp and resp.headers_sent:
# If the requests have already been sent, we should close the # If the requests have already been sent, we should close the
# connection to indicate the error. # connection to indicate the error.
self.log.exception("Error handling request")
try: try:
sock.shutdown(socket.SHUT_RDWR) sock.shutdown(socket.SHUT_RDWR)
sock.close() sock.close()

View File

@ -102,10 +102,13 @@ class SyncWorker(base.Worker):
self.log.debug("Error processing SSL request.") self.log.debug("Error processing SSL request.")
self.handle_error(req, client, addr, e) self.handle_error(req, client, addr, e)
except socket.error as e: except socket.error as e:
if e.args[0] != errno.EPIPE: if e.args[0] not in (errno.EPIPE, errno.ECONNRESET):
self.log.exception("Error processing request.") self.log.exception("Socket error processing request.")
else: else:
self.log.debug("Ignoring EPIPE") if e.args[0] == errno.ECONNRESET:
self.log.debug("Ignoring connection reset")
else:
self.log.debug("Ignoring EPIPE")
except Exception as e: except Exception as e:
self.handle_error(req, client, addr, e) self.handle_error(req, client, addr, e)
finally: finally:
@ -142,19 +145,18 @@ class SyncWorker(base.Worker):
respiter.close() respiter.close()
except socket.error: except socket.error:
raise raise
except Exception as e: except Exception:
if resp and resp.headers_sent: if resp and resp.headers_sent:
# If the requests have already been sent, we should close the # If the requests have already been sent, we should close the
# connection to indicate the error. # connection to indicate the error.
self.log.exception("Error handling request")
try: try:
client.shutdown(socket.SHUT_RDWR) client.shutdown(socket.SHUT_RDWR)
client.close() client.close()
except socket.error: except socket.error:
pass pass
raise StopIteration() raise StopIteration()
# Only send back traceback in HTTP in debug mode. raise
self.handle_error(req, client, addr, e)
return
finally: finally:
try: try:
self.cfg.post_request(self, req, environ, resp) self.cfg.post_request(self, req, environ, resp)