U ��.e�@s�ddlZddlmZddlZddlZzddlmZWn ek rTddlmZYnXdddgZGdd�de �Z ej d kr�d d �Z nd d �Z ddd�Z ddd�Zdd�Zdd�Zdd�addd�Zddd�ZdS)�N)�partial)� monotonic)�time�NoWayToWaitForSocketError� wait_for_read�wait_for_writec@s eZdZdS)rN)�__name__� __module__� __qualname__�r r �A/usr/lib/python3.8/site-packages/pip/_vendor/urllib3/util/wait.pyrs)��cCs||�S)Nr )�fn�timeoutr r r �_retry_on_intr*src Cs�|dkrtd�}n t�|}z ||�WSttjfk r�}zF|jdtjkrR�n.|t�}|dkrhd}|td�krxd}WY�qW5d}~XYqXqdS)N�infr)�floatr�OSError�select�error�args�errnoZEINTR)rrZdeadline�er r r r0s     Fc Csd|s|std��g}g}|r&|�|�|r4|�|�ttj|||�}t||�\}}} t|p`|p`| �S)N�2must specify at least one of read=True, write=True)� RuntimeError�appendrrr�bool) �sock�read�writerZrcheckZwcheckrZrreadyZwreadyZxreadyr r r �select_wait_for_socketGs  r!cs^|s|std��d}|r"|tjO}|r0|tjO}t�����||��fdd�}tt||��S)Nrrcs|dk r|d9}��|�S)Ni�)�poll)�t�Zpoll_objr r �do_pollfsz%poll_wait_for_socket..do_poll)rrZPOLLINZPOLLOUTr"�registerrr)rrr r�maskr%r r$r �poll_wait_for_socketZs    r(cOs td��dS)Nzno select-equivalent available)r�r�kwargsr r r �null_wait_for_socketnsr+c Cs<zt��}t|jd�Wnttfk r2YdSXdSdS)NrFT)rr"r�AttributeErrorrr$r r r �_have_working_pollrs r-cOs*t�r tanttd�rtantat||�S)Nr)r-r(�wait_for_socket�hasattrrr!r+r)r r r r.s  r.cCst|d|d�S)z� Waits for reading to be available on a given socket. Returns True if the socket is readable, or False if the timeout expired. T)rr�r.�rrr r r r�scCst|d|d�S)z� Waits for writing to be available on a given socket. Returns True if the socket is readable, or False if the timeout expired. T)r rr0r1r r r r�s)FFN)FFN)N)N)r� functoolsrr�sysrr� ImportError�__all__� Exceptionr� version_inforr!r(r+r-r.rrr r r r �s&