diff options
Diffstat (limited to 'Lib/socket.py')
| -rw-r--r-- | Lib/socket.py | 29 | 
1 files changed, 29 insertions, 0 deletions
diff --git a/Lib/socket.py b/Lib/socket.py index 0082e76..c03e884 100644 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -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  | 
