mirror of
https://github.com/python/cpython.git
synced 2025-07-28 21:55:21 +00:00
Added a 'create_connect()' function to socket.py, which creates a
connection with an optional timeout, and modified httplib.py to use this function in HTTPConnection. Applies patch 1676823.
This commit is contained in:
parent
f102e24bd3
commit
07c78be0b4
7 changed files with 181 additions and 25 deletions
|
@ -24,6 +24,7 @@ inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
|
|||
ssl() -- secure socket layer support (only available if configured)
|
||||
socket.getdefaulttimeout() -- get the default timeout value
|
||||
socket.setdefaulttimeout() -- set the default timeout value
|
||||
create_connection() -- connects to an address, with an optional timeout
|
||||
|
||||
[*] not available on all platforms!
|
||||
|
||||
|
@ -412,3 +413,31 @@ class _fileobject(object):
|
|||
if not line:
|
||||
raise StopIteration
|
||||
return line
|
||||
|
||||
|
||||
def create_connection(address, timeout=None):
|
||||
"""Connect to address (host, port) with an optional timeout.
|
||||
|
||||
Provides access to socketobject timeout for higher-level
|
||||
protocols. Passing a timeout will set the timeout on the
|
||||
socket instance (if not present, or passed as None, the
|
||||
default global timeout setting will be used).
|
||||
"""
|
||||
|
||||
msg = "getaddrinfo returns an empty list"
|
||||
host, port = address
|
||||
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
|
||||
af, socktype, proto, canonname, sa = res
|
||||
sock = None
|
||||
try:
|
||||
sock = socket(af, socktype, proto)
|
||||
if timeout is not None:
|
||||
sock.settimeout(timeout)
|
||||
sock.connect(sa)
|
||||
return sock
|
||||
|
||||
except error, msg:
|
||||
if sock is not None:
|
||||
sock.close()
|
||||
|
||||
raise error, msg
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue