o
    sDi                     @  sf   d Z ddlmZ ddlZddlZddlmZmZmZ e	edZ
eedeZdddZG dd dZdS )zSelect / poll helper    )annotationsN)AnyOptionalcastpollerrorexcBaseExceptionreturnOptional[int]c                 C  s0   t | drtt| jS | jrtt| jd S d S )Nerrnor   )hasattrr   intr   args)r    r   T/home/alumno/antzosa8961/venv/lib/python3.10/site-packages/pymongo/socket_checker.py_errno_from_exception   s
   
r   c                   @  s.   e Zd ZdddZ	ddddZdddZdS )SocketCheckerr
   Nonec                 C  s    |  t rt | _d S d | _d S )N)
_HAVE_POLLselectr   _poller)selfr   r   r   __init__#   s   
zSocketChecker.__init__Fr   sockr   readboolwritetimeoutOptional[float]c              
   C  s  	 za| j rGtjtjB }|r|tjB tjB }|r|tjB }| j || z|du r*dn|d }| j |}t	|W | j 
| W S | j 
| w |rL|gng }|rS|gng }	t||	|g|}t|W S  ttfy }
 zt|
tjtjfv r|W Y d}
~
q  d}
~
w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   r   r   r   r   *   s0   

zSocketChecker.selectc              	   C  sJ   z| j |ddW S  ttfy     ty   Y dS  ty$   Y dS w )z?Return True if we know socket has been closed, False otherwise.T)r   )r   RuntimeErrorKeyError
ValueError	Exception)r   r   r   r   r   socket_closedT   s   zSocketChecker.socket_closedN)r
   r   )FFr   )
r   r   r   r   r   r   r   r   r
   r   )r   r   r
   r   )__name__
__module____qualname__r   r   r5   r   r   r   r   r   "   s
    
*r   )r   r	   r
   r   )__doc__
__future__r   r   r   typingr   r   r   r   r   getattrr)   r(   r   r   r   r   r   r   <module>   s   

