o ~`@sddlZddlZddlZddlmZzddlmZWney)ddlmZYnwgdZGddde Z ej dkr@d d Z nd d Z dd dZ dddZddZddZddadddZdddZdS)N)partial) monotonic)time)NoWayToWaitForSocketError wait_for_readwait_for_writec@s eZdZdS)rN)__name__ __module__ __qualname__r r 3/usr/lib/python3/dist-packages/urllib3/util/wait.pyrsr)cCs||SNr )fntimeoutr r r _retry_on_intr*rc Cs|dur td}nt|} z||WSttjfyE}z"|jdtjkr(|t}|dkr3d}|tdkr;d}WYd}~qd}~ww)NinfTr)floatrOSErrorselecterrorargserrnoEINTR)rrdeadlineer r r r0s"      Fc Csd|s|stdg}g}|r|||r||ttj|||}t||\}}} t|p0|p0| S)N2must specify at least one of read=True, write=True) RuntimeErrorappendrrrbool) sockreadwriterrcheckwcheckrrreadywreadyxreadyr r r select_wait_for_socketGs  r*cs^|s|stdd}|r|tjO}|r|tjO}t||fdd}tt||S)Nrrcs|dur|d9}|S)Ni)poll)tpoll_objr r do_pollfs z%poll_wait_for_socket..do_poll)rrPOLLINPOLLOUTr+registerr!r)r"r#r$rmaskr/r r-r poll_wait_for_socketZs    r4cOstd)Nzno select-equivalent available)rrkwargsr r r null_wait_for_socketnrr7c Cs4z t}t|jdWdSttfyYdSw)NrFT)rr+rAttributeErrorrr-r r r _have_working_pollrsr9cOs.trtan ttdrtantat|i|S)Nr)r9r4wait_for_sockethasattrrr*r7r5r r r r:s  r:cCt|d|dS)zWaits for reading to be available on a given socket. Returns True if the socket is readable, or False if the timeout expired. T)r#rr:r"rr r r rrcCr<)zWaits for writing to be available on a given socket. Returns True if the socket is readable, or False if the timeout expired. T)r$rr=r>r r r rr?r)FFNr)rrsys functoolsrrr ImportError__all__ Exceptionr version_inforr*r4r7r9r:rrr r r r s*