
    _i                        d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	  e
ed          oej                            d           Z eede          ZddZ G d d          ZdS )zSelect / poll helper    )annotationsN)AnyOptionalcastpolljavaerrorexcBaseExceptionreturnOptional[int]c                    t          | d          rt          t          | j                  S | j        r t          t          | j        d                   S d S )Nerrnor   )hasattrr   intr   args)r
   s    9D:\Nbitz\venv\Lib\site-packages\pymongo/socket_checker.py_errno_from_exceptionr      sK    sG $C###
x &C!%%%4    c                  *    e Zd ZddZ	 dddZddZdS )SocketCheckerr   Nonec                Z    |  t           rt          j                    | _        d S d | _        d S )N)
_HAVE_POLLselectr   _poller)selfs    r   __init__zSocketChecker.__init__&   s,    + 	 !;==DLLLDLLLr   Fr   sockr   readboolwritetimeoutOptional[float]c                   	 	 | j         rt          j        t          j        z  }|r|t          j        z  t          j        z  }|r|t          j        z  }| j                             ||           	 |dn|dz  }| j                             |          }t          |          | j         
                    |           S # | j         
                    |           w xY w|r|gng }|r|gng }	t          j        ||	|g|          }t          |          S # t          t          f$ r3}
t          |
          t          j        t          j        fv rY d}
~
K d}
~
ww xY w)zSelect for reads or writes with a timeout in seconds (or None).

        Returns True if the socket is readable/writable, False on timeout.
        TNi  )r   r   POLLERRPOLLHUPPOLLINPOLLPRIPOLLOUTregisterr   r!   
unregisterany_SelectErrorOSErrorr   r   EINTREAGAIN)r   r   r    r"   r#   masktimeout_resrlistwlistr
   s              r   r   zSocketChecker.select-   sk    	< $!>FN:D E#fm3fnD 5#fn4L))$5556 ,3?44$"l//99
  $Cyy//5555//5555&*2TFFE&+3TFFE -utfgFFC s88O '*   (--%+u|1LLLHHHHs6   A*D .1B: D :C7D E'EEEc                    	 |                      |d          S # t          t          f$ r  t          $ r Y dS t          $ r Y dS w xY w)z?Return True if we know socket has been closed, False otherwise.T)r    )r   RuntimeErrorKeyError
ValueError	Exception)r   r   s     r   socket_closedzSocketChecker.socket_closedW   sx    	;;t$;///h' 	 	 	
  	 	 	 44 	 	 	 44	s    A	AAN)r   r   )FFr   )
r   r   r    r!   r"   r!   r#   r$   r   r!   )r   r   r   r!   )__name__
__module____qualname__r   r   r<    r   r   r   r   %   s]                ^_( ( ( ( (T     r   r   )r
   r   r   r   )__doc__
__future__r   r   r   systypingr   r   r   r   platform
startswithr   getattrr/   r.   r   r   r@   r   r   <module>rH      s      " " " " " "   



 & & & & & & & & & & WVV$$LS\-D-DV-L-L)L
wvw00   D D D D D D D D D Dr   