Skip to content

Commit 78afd70

Browse files
committed
Close connection if server configured without keepalive timeout
1 parent 5805a6f commit 78afd70

File tree

6 files changed

+22
-13
lines changed

6 files changed

+22
-13
lines changed

aiohttp/server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ def __init__(self, *, loop=None, keep_alive=None,
8989
self.access_log = access_log
9090
self.access_log_format = access_log_format
9191

92+
@property
93+
def keep_alive_timeout(self):
94+
return self._keep_alive_period
95+
9296
def closing(self):
9397
"""Worker process is about to exit, we need cleanup everything and
9498
stop accepting requests. It is especially important for keep-alive

aiohttp/web.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ def content_length(self):
131131

132132
class Request(HeadersMixin):
133133

134-
def __init__(self, app, message, payload, transport, writer):
134+
def __init__(self, app, message, payload, transport, writer,
135+
keep_alive_timeout):
135136
self._app = app
136137
self._version = message.version
137138
self._transport = transport
@@ -154,7 +155,7 @@ def __init__(self, app, message, payload, transport, writer):
154155
elif message.should_close:
155156
self._keep_alive = False
156157
else:
157-
self._keep_alive = True
158+
self._keep_alive = bool(keep_alive_timeout)
158159

159160
# matchdict, route_name, handler
160161
# or information about traversal lookup
@@ -967,7 +968,7 @@ def __init__(self, app, **kwargs):
967968
@asyncio.coroutine
968969
def handle_request(self, message, payload):
969970
request = Request(self._app, message, payload,
970-
self.transport, self.writer)
971+
self.transport, self.writer, self.keep_alive_timeout)
971972
try:
972973
match_info = yield from self._app.router.resolve(request)
973974

tests/test_urldispatch.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,15 @@ def setUp(self):
1717
def tearDown(self):
1818
self.loop.close()
1919

20-
def make_request(self, method, path, headers=MultiDict(), *,
21-
version=HttpVersion(1, 1), closing=False):
20+
def make_request(self, method, path):
2221
self.app = mock.Mock()
23-
message = RawRequestMessage(method, path, version, headers, closing,
24-
False)
22+
message = RawRequestMessage(method, path, HttpVersion(1, 1),
23+
MultiDict(), False, False)
2524
self.payload = mock.Mock()
2625
self.transport = mock.Mock()
2726
self.writer = mock.Mock()
2827
req = Request(self.app, message, self.payload,
29-
self.transport, self.writer)
28+
self.transport, self.writer, 15)
3029
return req
3130

3231
def test_add_route_root(self):

tests/test_web_exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def make_request(self, method='GET', path='/', headers=MultiDict()):
3434
message = RawRequestMessage(method, path, HttpVersion11, headers,
3535
False, False)
3636
req = Request(self.app, message, self.payload,
37-
self.transport, self.writer)
37+
self.transport, self.writer, 15)
3838
return req
3939

4040
def test_all_http_exceptions_exported(self):

tests/test_web_request.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,16 @@ def tearDown(self):
1717
self.loop.close()
1818

1919
def make_request(self, method, path, headers=MultiDict(), *,
20-
version=HttpVersion(1, 1), closing=False):
20+
version=HttpVersion(1, 1), closing=False,
21+
keep_alive_timeout=15):
2122
self.app = mock.Mock()
2223
message = RawRequestMessage(method, path, version, headers, closing,
2324
False)
2425
self.payload = mock.Mock()
2526
self.transport = mock.Mock()
2627
self.writer = mock.Mock()
2728
req = Request(self.app, message, self.payload,
28-
self.transport, self.writer)
29+
self.transport, self.writer, keep_alive_timeout)
2930
return req
3031

3132
def test_ctor(self):
@@ -96,6 +97,10 @@ def test_non_keepalive_on_closing(self):
9697
req = self.make_request('GET', '/', closing=True)
9798
self.assertFalse(req.keep_alive)
9899

100+
def test_non_keepalive_on_server_protocol_without_keepalive_timeout(self):
101+
req = self.make_request('GET', '/', closing=True, keep_alive_timeout=0)
102+
self.assertFalse(req.keep_alive)
103+
99104
def test_call_POST_on_GET_request(self):
100105
req = self.make_request('GET', '/')
101106

tests/test_web_response.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def make_request(self, method, path, headers=MultiDict()):
2323
self.transport = mock.Mock()
2424
self.writer = mock.Mock()
2525
req = Request(self.app, message, self.payload,
26-
self.transport, self.writer)
26+
self.transport, self.writer, 15)
2727
return req
2828

2929
def test_ctor(self):
@@ -292,7 +292,7 @@ def make_request(self, method, path, headers=MultiDict()):
292292
self.transport = mock.Mock()
293293
self.writer = mock.Mock()
294294
req = Request(self.app, message, self.payload,
295-
self.transport, self.writer)
295+
self.transport, self.writer, 15)
296296
return req
297297

298298
def test_ctor(self):

0 commit comments

Comments
 (0)