1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
U
I=®dã@snddlmZddlZddlmZmZddlmZdd„Zej    ddfd    d
„Z
d d „Z d d„Z dd„Z e dƒZdS)é)Úabsolute_importNé)ÚNoWayToWaitForSocketErrorÚ wait_for_readé)Ú_appengine_environcCsNt|ddƒ}|dkrdS|dkr$dSzt|ddWStk
rHYdSXdS)a 
    Returns True if the connection is dropped and should be closed.
 
    :param conn:
        :class:`httplib.HTTPConnection` object.
 
    Note: For platforms like AppEngine, this will always return ``False`` to
    let the platform handle connection recycling transparently for us.
    ÚsockFNTg)Útimeout)Úgetattrrr)Úconnr©r úZD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\pip/_vendor/urllib3/util/connection.pyÚis_connection_droppeds
rc Csö|\}}| d¡r| d¡}d}tƒ}t |||tj¡D]¢}|\}    }
} } } d}zNt |    |
| ¡}t||ƒ|tjk    r|| |¡|rŠ|     |¡| 
| ¡|WStj k
rØ}z|}|dk    rÈ|  ¡d}W5d}~XYq8Xq8|dk    rè|‚t  d¡‚dS)adConnect to *address* and return the socket object.
 
    Convenience function.  Connect to *address* (a 2-tuple ``(host,
    port)``) and return the socket object.  Passing the optional
    *timeout* parameter will set the timeout on the socket instance
    before attempting to connect.  If no *timeout* is supplied, the
    global default timeout setting returned by :func:`getdefaulttimeout`
    is used.  If *source_address* is set it must be a tuple of (host, port)
    for the socket to bind as a source address before making the connection.
    An host of '' or port 0 tells the OS to use the default.
    ú[z[]Nz!getaddrinfo returns an empty list) Ú
startswithÚstripÚallowed_gai_familyÚsocketÚ getaddrinfoÚ SOCK_STREAMÚ_set_socket_optionsÚ_GLOBAL_DEFAULT_TIMEOUTÚ
settimeoutÚbindÚconnectÚerrorÚclose)Úaddressr    Úsource_addressÚsocket_optionsÚhostÚportÚerrÚfamilyÚresÚafÚsocktypeÚprotoÚ    canonnameÚsarÚer r r Úcreate_connection!s2
 
 
 
 
 
 
 
r+cCs$|dkr dS|D]}|j|ŽqdS)N)Ú
setsockopt)rÚoptionsÚoptr r r rYsrcCstj}trtj}|S)z³This function is designed to work in the context of
    getaddrinfo, where family=socket.AF_UNSPEC is the default and
    will perform a DNS search for both IPv6 and IPv4 records.)rÚAF_INETÚHAS_IPV6Ú    AF_UNSPEC)r#r r r rasrcCsbd}d}t ¡rdStjrRz"t tj¡}| |df¡d}Wntk
rPYnX|r^| ¡|S)z6 Returns True if the system can bind an IPv6 address. NFrT)rÚis_appengine_sandboxrÚhas_ipv6ÚAF_INET6rÚ    Exceptionr)r rr3r r r Ú    _has_ipv6ls r6z::1)Ú
__future__rrÚwaitrrÚcontribrrrr+rrr6r0r r r r Ú<module>s  ü
8