
    )h%                         d dl mZ d dlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ d	 Zej                  ddfd
Zd Zd Zd Z ed      Zy)    )absolute_importN   )_appengine_environ)LocationParseError)six   )NoWayToWaitForSocketErrorwait_for_readc                 f    t        | dd      }|du ry|y	 t        |d      S # t        $ r Y yw xY w)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.
    sockFTg        )timeout)getattrr
   r	   )connr   s     V/var/www/html/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.pyis_connection_droppedr      sH     4'Du}|T3//$ s   $ 	00c                    | \  }}|j                  d      r|j                  d      }d}t               }	 |j                  d       t        j                  |||t        j                        D ]z  }|\  }	}
}}}d}	 t        j                  |	|
|      }t        ||       |t        j                  ur|j                  |       |r|j                  |       |j                  |       |c S  ||t        j                   d      # t        $ r% t        j                  t        d|z        d      cY S w xY w# t        j                   $ r }|}||j#                          d}Y d}~d}~ww xY w)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[]Nidnaz'%s', label empty or too longz!getaddrinfo returns an empty list)
startswithstripallowed_gai_familyencodeUnicodeErrorr   
raise_fromr   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   es                   r   create_connectionr3   %   s^   $ JD$szz$
C
  !F
F !!$ff6H6HI -0*HeY	==Xu5D  n5f<<<(		.)LLK, 	
,,:
;;=  
~~?$FG
 	

* || 	C

		s*   D :A+D3+D0/D03E&E!!E&c                 6    |y |D ]  } | j                   |   y )N)
setsockopt)r   optionsopts      r   r   r   d   s'         c                  R    t         j                  } t        rt         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_INETHAS_IPV6	AF_UNSPEC)r+   s    r   r   r   l   s     
 ^^F!!Mr8   c                    d}d}t        j                         ryt        j                  r9	 t        j                  t        j                        }|j                  | df       d}|r|j                          |S # t        $ r Y w xY w)z4Returns True if the system can bind an IPv6 address.NFr   T)r   is_appengine_sandboxr   has_ipv6AF_INET6r!   	Exceptionr$   )r(   r   r?   s      r   	_has_ipv6rB   w   sw    DH ..0	==1DIItQi H 

O  		s   8A7 7	BBz::1)
__future__r   r   contribr   
exceptionsr   packagesr   waitr	   r
   r   r   r3   r   r   rB   r;    r8   r   <module>rI      sN    &  ( +  :8 **	<<~< Ur8   