o Sb)@sldZddlZddlZddlZddlmZmZeedo!ej d Z e ede Z ddZGd d d eZdS) zSelect / poll helperN)AnyOptionalpolljavaerrorcCs$t|dr|jS|jr|jdSdS)Nerrnor)hasattrrargs)excr =/tmp/pip-target-onvjaxws/lib/python/pymongo/socket_checker.py_errno_from_exceptions  r c @sNeZdZdddZ ddeded ed eedef d d Zdedefd dZ dS) SocketCheckerreturnNcCs |tr t|_dSd|_dS)N) _HAVE_POLLselectr_poller)selfr r r __init__%s zSocketChecker.__init__Frsockreadwritetimeoutc Cs za|jrGtjtjB}|r|tjBtjB}|r|tjB}|j||z|dur*dn|d}|j|}t |W|j |WS|j |w|rL|gng}|rS|gng} t|| |g|}t |WSt t fy} zt| tjtjfvr|WYd} ~ qd} ~ ww)zSelect for reads or writes with a timeout in seconds (or None). Returns True if the socket is readable/writable, False on timeout. TNi)rrPOLLERRPOLLHUPPOLLINPOLLPRIPOLLOUTregisterrbool unregisterany _SelectErrorIOErrorr rZEINTREAGAIN) rrrrrmaskZtimeout_resZrlistZwlistr r r r r,s0     zSocketChecker.selectc CsJz|j|ddWSttfytyYdSty$YdSw)z?Return True if we know socket has been closed, False otherwise.T)r)r RuntimeErrorKeyError ValueError Exception)rrr r r socket_closedVs  zSocketChecker.socket_closed)rN)FFr) __name__ __module__ __qualname__rrrrfloatrr+r r r r r$s  *r)__doc__rrsystypingrrrplatform startswithrgetattrOSErrorr"r objectrr r r r s