bpo-27682: Handle client connection terminations in wsgiref (GH-9713)
(cherry picked from commit 3d37ea25dc
)
Co-authored-by: Petter Strandmark <petter.strandmark@gmail.com>
This commit is contained in:
parent
5f5b187bfa
commit
47ffc1a9f6
|
@ -780,6 +780,24 @@ class HandlerTests(TestCase):
|
|||
b"Hello, world!",
|
||||
written)
|
||||
|
||||
def testClientConnectionTerminations(self):
|
||||
environ = {"SERVER_PROTOCOL": "HTTP/1.0"}
|
||||
for exception in (
|
||||
ConnectionAbortedError,
|
||||
BrokenPipeError,
|
||||
ConnectionResetError,
|
||||
):
|
||||
with self.subTest(exception=exception):
|
||||
class AbortingWriter:
|
||||
def write(self, b):
|
||||
raise exception
|
||||
|
||||
stderr = StringIO()
|
||||
h = SimpleHandler(BytesIO(), AbortingWriter(), stderr, environ)
|
||||
h.run(hello_app)
|
||||
|
||||
self.assertFalse(stderr.getvalue())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -136,6 +136,10 @@ class BaseHandler:
|
|||
self.setup_environ()
|
||||
self.result = application(self.environ, self.start_response)
|
||||
self.finish_response()
|
||||
except (ConnectionAbortedError, BrokenPipeError, ConnectionResetError):
|
||||
# We expect the client to close the connection abruptly from time
|
||||
# to time.
|
||||
return
|
||||
except:
|
||||
try:
|
||||
self.handle_error()
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
:class:`wsgiref.handlers.BaseHandler` now handles abrupt client connection
|
||||
terminations gracefully. Patch by Petter Strandmark.
|
Loading…
Reference in New Issue