diff --git a/mercurial/httpclient/__init__.py b/mercurial/httpclient/__init__.py --- a/mercurial/httpclient/__init__.py +++ b/mercurial/httpclient/__init__.py @@ -629,9 +629,11 @@ class HTTPConnection(object): r = self._current_response while r.headers is None: r._select() - if r.complete() or r.will_close: + if r.will_close: self.sock = None self._current_response = None + elif r.complete(): + self._current_response = None else: self._current_response_taken = True return r diff --git a/mercurial/httpclient/tests/simple_http_test.py b/mercurial/httpclient/tests/simple_http_test.py --- a/mercurial/httpclient/tests/simple_http_test.py +++ b/mercurial/httpclient/tests/simple_http_test.py @@ -116,6 +116,9 @@ dotencode self.assertEqual('1234567890', resp.read()) self.assertEqual(['Value\n Rest of value'], resp.headers.getheaders('multiline')) + # Socket should not be closed + self.assertEqual(resp.sock.closed, False) + self.assertEqual(con.sock.closed, False) def testSimpleRequest(self): con = http.HTTPConnection('1.2.3.4:80')