a †oeã@sÌddlZddlZddlZddlmZzddlmZWneyRddlmZYn0gd¢ZGdd„de ƒZ ej dkr€d d „Z nd d „Z dd d„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 ú2C:\Program Files\Certbot\pkgs\urllib3\util\wait.pyrsr)éécCs||ƒS)Nr )ÚfnÚtimeoutr r r Ú_retry_on_intr*src Csž|durtdƒ}n tƒ|}z ||ƒWSttjfy–}zR|jdtjkrP‚n2|tƒ}|dkrfd}|tdƒkrvd}WYd}~qWYd}~qd}~00qdS)NÚinfr)ÚfloatrÚOSErrorÚselectÚerrorÚargsÚerrnoZEINTR)rrZdeadlineÚer r r r/s     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_socketFs  r!cs^|s|stdƒ‚d}|r"|tjO}|r0|tjO}t ¡‰ˆ ||¡‡fdd„}tt||ƒƒS)Nrrcs|dur|d9}ˆ |¡S)Niè)Úpoll)Út©Zpoll_objr r Údo_pollesz%poll_wait_for_socket..do_poll)rrZPOLLINZPOLLOUTr"Úregisterrr)rrr rÚmaskr%r r$r Úpoll_wait_for_socketYs    r(cOs tdƒ‚dS)Nzno select-equivalent available)r©rÚkwargsr r r Únull_wait_for_socketmsr+c Cs:zt ¡}t|jdƒWnttfy0YdS0dSdS)NrFT)rr"rÚAttributeErrorrr$r r r Ú_have_working_pollqs r-cOs.tƒr tanttdƒrtantat|i|¤Ž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�srcCst|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”sr)FFN)FFN)N)N)rrÚsysÚ functoolsrrrÚ ImportErrorÚ__all__Ú ExceptionrÚ version_inforr!r(r+r-r.rrr r r r Ús&