� ��^i8���ddlmZddlZddlmZddlmZddlmZddl m Z m Z d �Z ej ddfd �Zd �Zd �Zd �Zed��ZdS)�)�absolute_importN)�LocationParseError�)�_appengine_environ)�six�)�NoWayToWaitForSocketError� wait_for_readc�~�t|dd��}|durdS|�dS t|d���S#t$rYdSwxYw)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 s ��/builddir/build/BUILDROOT/alt-python311-pip-21.3.1-4.el8.x86_64/opt/alt/python311/lib/python3.11/site-packages/pip/_vendor/urllib3/util/connection.py�is_connection_droppedr sg�� �4��� '� '�D� �u�}�}��u� �|��t���T�3�/�/�/�/�� $�����u�u����s �.� <�<c��|\}}|�d��r|�d��}d}t��} |�d��n5#t$r(t jtd|z��d��cYSwxYwtj |||tj ��D]�}|\} } } } } d} tj| | | ��}t||��|tj ur|� |��|r|�|��|�| ��|cS#tj$r$}|}|�|���d}Yd}~��d}~wwxYw|�|�tjd���)akConnect 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���$�J�D�$� ���s��� ��z�z�$���� �C�  � !� !�F� � � � �F������ � � � ��~� �?�$�F� G� G�� � � � � � ���� �!�$��f�f�6H�I�I����-0�*��H�e�Y���� ��=��X�u�5�5�D� ��n� 5� 5� 5��f�<�<�<�����(�(�(�� *�� � �.�)�)�)� �L�L�� � � ��K�K�K���|� � � ��C���� � � � � ������������  ����  ��� � �,�:� ;� ;�;s+�A�/B �B �:A6D3�3E&�E!�!E&c�,�|�dS|D] }|j|�� dS)N)� setsockopt)r �options�opts rrres7�������������������c�D�tj}tr tj}|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+s rrrms �� �^�F��"��!�� �Mr8c��d}d}tj��rdStjrI tjtj��}|�|df��d}n#t $rYnwxYw|r|���|S)z4Returns True if the system can bind an IPv6 address.NFrT)r�is_appengine_sandboxr�has_ipv6�AF_INET6r!� Exceptionr$)r(r r?s r� _has_ipv6rBxs��� �D��H� �.�0�0���u� �� �  ��=���1�1�D� �I�I�t�Q�i� � � ��H�H��� � � � �D� ���� �� � � � � � � �Os�7A� A,�+A,z::1)� __future__rr�pip._vendor.urllib3.exceptionsr�contribr�packagesr�waitr r rrr3rrrBr;�r8r�rIs���&�&�&�&�&�&� � � � �=�=�=�=�=�=�(�(�(�(�(�(�������:�:�:�:�:�:�:�:����8 � *��� <<�<<�<<�<<�~���������< �9�U� � ���r8