U ʗRe% @ s d dl mZ d dlZddlmZ ddlmZ ddlmZ ddl m Z mZ d d Zej ddfddZd d Zdd Zdd ZedZdS ) )absolute_importN )_appengine_environ)LocationParseError)six )NoWayToWaitForSocketError wait_for_readc C sN t | dd}|dkrdS |dkr$dS zt|ddW S tk rH Y dS X dS )a$ Returns True if the connection is dropped and should be closed. :param conn: :class:`http.client.HTTPConnection` object. Note: For platforms like AppEngine, this will always return ``False`` to let the platform handle connection recycling transparently for us. sockFNTg )timeout)getattrr r )connr r /builddir/build/BUILDROOT/alt-python38-pip-22.2.1-2.el8.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/urllib3/util/connection.pyis_connection_dropped s r c C s4 | \}}| dr|d}d}t }z|d W n( tk r\ ttd| d Y S X t |||tj D ]}|\} } }}} d}zNt| | |}t|| |tjk r| | |r|| || |W S tjk r } z|}|dk r| d}W 5 d}~X Y qpX qp|dk r&|tddS )ak Connect 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:`socket.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[]Nidnaz'%s', label empty or too longz!getaddrinfo returns an empty list) startswithstripallowed_gai_familyencodeUnicodeErrorr raise_fromr socketgetaddrinfoSOCK_STREAM_set_socket_options_GLOBAL_DEFAULT_TIMEOUT settimeoutbindconnecterrorclose)addressr source_addresssocket_optionshostporterrfamilyresafsocktypeproto canonnamesar er r r create_connection% s@ r1 c C s$ |d krd S |D ]}| j | qd S )N) setsockopt)r optionsoptr r r r d s r c C s t j} trt j} | S )zThis 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_INETHAS_IPV6 AF_UNSPEC)r) r r r r l s r c C sb d}d}t rdS tjrRz"ttj}|| df d}W n tk rP Y nX |r^| |S )z4Returns True if the system can bind an IPv6 address.NFr T)r is_appengine_sandboxr has_ipv6AF_INET6r Exceptionr" )r&