‹“Reã@sšddlmZddlZddlmZmZddlmZdd„Zej ddd d „Z d d „Z d d„Z dd„Z e dƒZdS)é)Úabsolute_importNé)ÚNoWayToWaitForSocketErrorÚ wait_for_readé)Ú_appengine_environc Csct|ddƒ}|dkr"dS|dkr2dSyt|ddƒSWntk r^dSYnXdS)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. ÚsockFNTÚtimeoutg)Úgetattrrr)Úconnr©r ú’/builddir/build/BUILDROOT/alt-python35-pip-20.2.4-5.el8.x86_64/opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/urllib3/util/connection.pyÚis_connection_droppeds    rcCsR|\}}|jdƒr*|jdƒ}d}tƒ}xñtj|||tjƒD]Ô}|\} } } } } d}yftj| | | ƒ}t||ƒ|tjk r·|j|ƒ|rÊ|j |ƒ|j | ƒ|SWqUtj k r(}z'|}|dk r|j ƒd}WYdd}~XqUXqUW|dk r?|‚tj 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+cCs2|dkrdSx|D]}|j|ŒqWdS)N)Ú setsockopt)rÚoptionsÚoptr r r rYs  rcCstj}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 ras  rc Cs}d}d}tjƒrdStjriy/tjtjƒ}|j|dfƒd}Wntk rhYnX|ry|jƒ|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 Ús  4