diff options
author | Stefan Nica <snica@suse.com> | 2017-11-03 19:02:20 +0100 |
---|---|---|
committer | Sergey Shepelev <temotor@gmail.com> | 2017-11-07 19:21:13 +0300 |
commit | c669f3040f250d04b8bec266409c9ad442f79876 (patch) | |
tree | e9dc4710fc0aa04e3573976ae42e9bfbafcb7aa6 | |
parent | 5b8f5f595624bdfb5f707707959977bb56864e0d (diff) | |
download | eventlet-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.py | 7 |
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 '' |