Issue #9792: In case of connection failure, socket.create_connection()

would swallow the exception and raise a new one, making it impossible
to fetch the original errno, or to filter timeout errors.  Now the
original error is re-raised.
This commit is contained in:
Antoine Pitrou 2010-09-07 21:05:49 +00:00
parent a88c83cbab
commit 4b92b5fad3
3 changed files with 48 additions and 9 deletions

View file

@ -297,8 +297,8 @@ def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
An host of '' or port 0 tells the OS to use the default.
"""
msg = "getaddrinfo returns an empty list"
host, port = address
err = None
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
af, socktype, proto, canonname, sa = res
sock = None
@ -311,9 +311,12 @@ def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
sock.connect(sa)
return sock
except error as err:
msg = err
except error as _:
err = _
if sock is not None:
sock.close()
raise error(msg)
if err is not None:
raise err
else:
raise error("getaddrinfo returns an empty list")