mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Server: Fix connections not being closed after errors/timeouts on the server side
This commit is contained in:
parent
fc576760c2
commit
355635af74
@ -606,8 +606,9 @@ class HTTPConnection(HTTPRequest):
|
|||||||
self.set_state(WRITE, self.write_iter, output)
|
self.set_state(WRITE, self.write_iter, output)
|
||||||
|
|
||||||
def reset_state(self):
|
def reset_state(self):
|
||||||
|
ready = not self.close_after_response
|
||||||
self.connection_ready()
|
self.connection_ready()
|
||||||
self.ready = not self.close_after_response
|
self.ready = ready
|
||||||
self.end_send_optimization()
|
self.end_send_optimization()
|
||||||
|
|
||||||
def report_unhandled_exception(self, e, formatted_traceback):
|
def report_unhandled_exception(self, e, formatted_traceback):
|
||||||
|
@ -12,6 +12,7 @@ from tempfile import NamedTemporaryFile
|
|||||||
|
|
||||||
from calibre import guess_type
|
from calibre import guess_type
|
||||||
from calibre.srv.tests.base import BaseTest, TestServer
|
from calibre.srv.tests.base import BaseTest, TestServer
|
||||||
|
from calibre.srv.utils import eintr_retry_call
|
||||||
from calibre.utils.monotonic import monotonic
|
from calibre.utils.monotonic import monotonic
|
||||||
|
|
||||||
is_ci = os.environ.get('CI', '').lower() == 'true'
|
is_ci = os.environ.get('CI', '').lower() == 'true'
|
||||||
@ -284,7 +285,6 @@ class TestHTTP(BaseTest):
|
|||||||
server.loop.opts.timeout = 10 # ensure socket is not closed because of timeout
|
server.loop.opts.timeout = 10 # ensure socket is not closed because of timeout
|
||||||
conn.request('GET', '/close', headers={'Connection':'close'})
|
conn.request('GET', '/close', headers={'Connection':'close'})
|
||||||
r = conn.getresponse()
|
r = conn.getresponse()
|
||||||
self.ae(server.loop.num_active_connections, 1)
|
|
||||||
self.ae(r.status, 200), self.ae(r.read(), 'close')
|
self.ae(r.status, 200), self.ae(r.read(), 'close')
|
||||||
server.loop.wakeup()
|
server.loop.wakeup()
|
||||||
num = 10
|
num = 10
|
||||||
@ -293,6 +293,14 @@ class TestHTTP(BaseTest):
|
|||||||
num -= 1
|
num -= 1
|
||||||
self.ae(server.loop.num_active_connections, 0)
|
self.ae(server.loop.num_active_connections, 0)
|
||||||
self.assertIsNone(conn.sock)
|
self.assertIsNone(conn.sock)
|
||||||
|
|
||||||
|
# Test timeout
|
||||||
|
server.loop.opts.timeout = 0.1
|
||||||
|
conn = server.connect()
|
||||||
|
conn.request('GET', '/something')
|
||||||
|
r = conn.getresponse()
|
||||||
|
self.ae(r.status, 200), self.ae(r.read(), 'something')
|
||||||
|
self.assertIn('Request Timeout', eintr_retry_call(conn.sock.recv, 500))
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
def test_http_response(self): # {{{
|
def test_http_response(self): # {{{
|
||||||
@ -432,4 +440,3 @@ class TestHTTP(BaseTest):
|
|||||||
r = conn.getresponse()
|
r = conn.getresponse()
|
||||||
self.assertEqual(data, r.read())
|
self.assertEqual(data, r.read())
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user