mirror of
https://github.com/internetarchive/warcprox.git
synced 2025-01-18 13:22:09 +01:00
always call socket.shutdown() to close connections
This commit is contained in:
parent
ab52e81019
commit
385014c322
2
setup.py
2
setup.py
@ -40,7 +40,7 @@ except:
|
|||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name='warcprox',
|
name='warcprox',
|
||||||
version='2.4b2.dev161',
|
version='2.4b2.dev162',
|
||||||
description='WARC writing MITM HTTP/S proxy',
|
description='WARC writing MITM HTTP/S proxy',
|
||||||
url='https://github.com/internetarchive/warcprox',
|
url='https://github.com/internetarchive/warcprox',
|
||||||
author='Noah Levitt',
|
author='Noah Levitt',
|
||||||
|
@ -279,9 +279,9 @@ class _TestHttpRequestHandler(http_server.BaseHTTPRequestHandler):
|
|||||||
headers, payload = self.build_response()
|
headers, payload = self.build_response()
|
||||||
self.connection.sendall(headers)
|
self.connection.sendall(headers)
|
||||||
self.connection.sendall(payload)
|
self.connection.sendall(payload)
|
||||||
if self.path == '/missing-content-length':
|
if self.path in ('/missing-content-length', '/empty-response'):
|
||||||
# response without content-length (and not chunked) must close the
|
# server must close the connection, else client has no idea if
|
||||||
# connection, else client has no idea if there is more data coming
|
# there is more data coming
|
||||||
self.connection.shutdown(socket.SHUT_RDWR)
|
self.connection.shutdown(socket.SHUT_RDWR)
|
||||||
self.connection.close()
|
self.connection.close()
|
||||||
|
|
||||||
@ -1823,6 +1823,14 @@ def test_socket_timeout_response(
|
|||||||
response = requests.get(url, proxies=archiving_proxies, verify=False)
|
response = requests.get(url, proxies=archiving_proxies, verify=False)
|
||||||
assert response.status_code == 502
|
assert response.status_code == 502
|
||||||
|
|
||||||
|
# test that the connection is cleaned up properly after truncating a
|
||||||
|
# response (no hang or timeout)
|
||||||
|
url = 'http://localhost:%s/' % http_daemon.server_port
|
||||||
|
response = requests.get(
|
||||||
|
url, proxies=archiving_proxies, verify=False, timeout=10)
|
||||||
|
assert response.status_code == 404
|
||||||
|
assert response.content == b'404 Not Found\n'
|
||||||
|
|
||||||
def test_empty_response(
|
def test_empty_response(
|
||||||
warcprox_, http_daemon, https_daemon, archiving_proxies,
|
warcprox_, http_daemon, https_daemon, archiving_proxies,
|
||||||
playback_proxies):
|
playback_proxies):
|
||||||
|
@ -468,6 +468,7 @@ class MitmProxyHandler(http_server.BaseHTTPRequestHandler):
|
|||||||
if (self._max_resource_size and
|
if (self._max_resource_size and
|
||||||
prox_rec_res.recorder.len > self._max_resource_size):
|
prox_rec_res.recorder.len > self._max_resource_size):
|
||||||
prox_rec_res.truncated = b'length'
|
prox_rec_res.truncated = b'length'
|
||||||
|
self._remote_server_conn.sock.shutdown(socket.SHUT_RDWR)
|
||||||
self._remote_server_conn.sock.close()
|
self._remote_server_conn.sock.close()
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
'truncating response because max resource size %d '
|
'truncating response because max resource size %d '
|
||||||
@ -481,6 +482,7 @@ class MitmProxyHandler(http_server.BaseHTTPRequestHandler):
|
|||||||
if not is_connection_dropped(self._remote_server_conn):
|
if not is_connection_dropped(self._remote_server_conn):
|
||||||
self._conn_pool._put_conn(self._remote_server_conn)
|
self._conn_pool._put_conn(self._remote_server_conn)
|
||||||
except:
|
except:
|
||||||
|
self._remote_server_conn.sock.shutdown(socket.SHUT_RDWR)
|
||||||
self._remote_server_conn.sock.close()
|
self._remote_server_conn.sock.close()
|
||||||
raise
|
raise
|
||||||
finally:
|
finally:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user