summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Nica <snica@suse.com>2017-11-03 19:02:20 +0100
committerSergey Shepelev <temotor@gmail.com>2017-11-07 19:21:13 +0300
commitc669f3040f250d04b8bec266409c9ad442f79876 (patch)
treee9dc4710fc0aa04e3573976ae42e9bfbafcb7aa6
parent5b8f5f595624bdfb5f707707959977bb56864e0d (diff)
downloadeventlet-c669f3040f250d04b8bec266409c9ad442f79876.tar.gz
wsgi: handle remote connection resets
While processing a WSGI request, if the remote client forcefully resets the connection while the request data is being read from the socket (e.g. HAProxy health check), the ECONNRESET socket error is not properly handled and may end up being logged in strerr or in a log file. https://github.com/eventlet/eventlet/issues/446
-rw-r--r--eventlet/wsgi.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/eventlet/wsgi.py b/eventlet/wsgi.py
index 38a18c7..7576f0e 100644
--- a/eventlet/wsgi.py
+++ b/eventlet/wsgi.py
@@ -381,7 +381,12 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
except greenio.SSL.ZeroReturnError:
pass
except socket.error as e:
- if support.get_errno(e) not in BAD_SOCK:
+ last_errno = support.get_errno(e)
+ if last_errno in BROKEN_SOCK:
+ self.server.log.debug('({0}) connection reset by peer {1!r}'.format(
+ self.server.pid,
+ self.client_address))
+ elif last_errno not in BAD_SOCK:
raise
return ''