o
    'h                     @  s|   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dZG dd dZdS )zSelect / poll helper    )annotationsN)AnyOptionalcastpolljava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   R/var/www/html/olx_land/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_closedW   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   r6   r   r   r   r   r   %   s
    
*r   )r	   r
   r   r   )__doc__
__future__r   r   r   systypingr   r   r   r   platform
startswithr   getattrr*   r)   r   r   r   r   r   r   <module>   s   
