homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ezio.melotti
Recipients davide.rizzo, ezio.melotti, jhylton, pitrou
Date 2011年05月21日.12:42:34
SpamBayes Score 4.7203408e-11
Marked as misclassified No
Message-id <1305981756.26.0.970199835965.issue12133@psf.upfronthosting.co.za>
In-reply-to
Content
In case of error (e.g. timeout error), urllib.request leaves the socket open:
import urllib.request as ur
import socket
s = socket.socket()
s.bind(('localhost', 10000))
s.listen(0)
socket.setdefaulttimeout(5)
ur.urlopen('http://localhost.localdomain:10000')
outputs:
sys:1: ResourceWarning: unclosed <socket.socket object, fd=4, family=2, type=1, proto=6>
Traceback (most recent call last):
 File "/home/wolf/dev/py/py3k/Lib/urllib/request.py", line 1146, in do_open
 r = h.getresponse() # an HTTPResponse instance
 File "/home/wolf/dev/py/py3k/Lib/http/client.py", line 1046, in getresponse
 response.begin()
 File "/home/wolf/dev/py/py3k/Lib/http/client.py", line 346, in begin
 version, status, reason = self._read_status()
 File "/home/wolf/dev/py/py3k/Lib/http/client.py", line 308, in _read_status
 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
 File "/home/wolf/dev/py/py3k/Lib/socket.py", line 279, in readinto
 return self._sock.recv_into(b)
socket.timeout: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/home/wolf/dev/py/py3k/Lib/urllib/request.py", line 138, in urlopen
 return opener.open(url, data, timeout)
 File "/home/wolf/dev/py/py3k/Lib/urllib/request.py", line 369, in open
 response = self._open(req, data)
 File "/home/wolf/dev/py/py3k/Lib/urllib/request.py", line 387, in _open
 '_open', req)
 File "/home/wolf/dev/py/py3k/Lib/urllib/request.py", line 347, in _call_chain
 result = func(*args)
 File "/home/wolf/dev/py/py3k/Lib/urllib/request.py", line 1163, in http_open
 return self.do_open(http.client.HTTPConnection, req)
 File "/home/wolf/dev/py/py3k/Lib/urllib/request.py", line 1148, in do_open
 raise URLError(err)
urllib.error.URLError: <urlopen error timed out>
>>>
AFAIU, when urlopen returns or raises, the socket can be closed, so the attached patch adds a "finally" that calls close() on the HTTPConnection object. The test suite pass (except for a mock that was missing the close method), but I'm not 100% sure that it's always safe to call close().
This ResourceWarning has been exposed by test_packaging.
History
Date User Action Args
2011年05月21日 12:42:36ezio.melottisetrecipients: + ezio.melotti, jhylton, pitrou, davide.rizzo
2011年05月21日 12:42:36ezio.melottisetmessageid: <1305981756.26.0.970199835965.issue12133@psf.upfronthosting.co.za>
2011年05月21日 12:42:35ezio.melottilinkissue12133 messages
2011年05月21日 12:42:35ezio.melotticreate

AltStyle によって変換されたページ (->オリジナル) /