U if@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd lmZd ZdZd ZdZdZdZdZGddde jZGddde jZGdddeZGdddeZGddde Z!Gdddej"Z#Gdddej$Z%Gd d!d!Z&Gd"d#d#e j'Z(e#Z)Gd$d%d%e j*Z+Gd&d'd'e j*Z,e,Z-dS)(N)events)base_subprocess)futures) exceptions)proactor_events)selector_events)tasks) windows_utils)logger)SelectorEventLoopProactorEventLoop IocpProactorDefaultEventLoopPolicyWindowsSelectorEventLoopPolicyWindowsProactorEventLoopPolicyiigMbP?g?csZeZdZddfdd ZfddZddZfd d Zfd d Zfd dZZ S)_OverlappedFutureNloopcs&tj|d|jr|jd=||_dSNr)super__init___source_traceback_ov)selfovr __class__;/opt/alt/python38/lib64/python3.8/asyncio/windows_events.pyr1sz_OverlappedFuture.__init__csHt}|jdk rD|jjr dnd}|dd|d|jjdd|S)NpendingZ completedrz overlapped=)r _repr_inforr"insertaddressrinfostaterr r!r%7s    z_OverlappedFuture._repr_infoc Csr|jdkrdSz|jWnJtk rf}z,d||d}|jrJ|j|d<|j|W5d}~XYnXd|_dS)Nz&Cancelling an overlapped future failedmessage exceptionfuturesource_traceback)rcancelOSErrorr_loopcall_exception_handler)rexccontextr r r!_cancel_overlapped>s  z$_OverlappedFuture._cancel_overlappedcs|tSN)r6rr0rrr r!r0Nsz_OverlappedFuture.cancelcst||dSr7)r set_exceptionr6rr-rr r!r9Rs z_OverlappedFuture.set_exceptioncst|d|_dSr7)r set_resultrrresultrr r!r;Vs z_OverlappedFuture.set_result) __name__ __module__ __qualname__rr%r6r0r9r; __classcell__r r rr!r+s    rcsjeZdZddfdd ZddZfddZd d Zd d Zfd dZfddZ fddZ Z S)_BaseWaitHandleFutureNrcs8tj|d|jr|jd=||_||_||_d|_dS)NrrT)rrrr_handle _wait_handle _registered)rrhandle wait_handlerrr r!r^sz_BaseWaitHandleFuture.__init__cCst|jdtjkSNr)_winapiZWaitForSingleObjectrCZ WAIT_OBJECT_0r8r r r!_pollls z_BaseWaitHandleFuture._pollcsdt}|d|jd|jdk rB|r4dnd}|||jdk r`|d|jd|S)Nzhandle=r#ZsignaledZwaitingz wait_handle=)rr%appendrCrJrDr(rr r!r%qs    z _BaseWaitHandleFuture._repr_infocCs d|_dSr7)rrfutr r r!_unregister_wait_cb{sz)_BaseWaitHandleFuture._unregister_wait_cbc Cs|js dSd|_|j}d|_zt|Wn`tk r}zB|jtjkrzd||d}|jrd|j|d<|j |WYdSW5d}~XYnX| ddSNFz$Failed to unregister the wait handler+r/) rErD _overlappedZUnregisterWaitr1winerrorERROR_IO_PENDINGrr2r3rNrrGr4r5r r r!_unregister_waits$   z&_BaseWaitHandleFuture._unregister_waitcs|tSr7)rTrr0r8rr r!r0sz_BaseWaitHandleFuture.cancelcs|t|dSr7)rTrr9r:rr r!r9sz#_BaseWaitHandleFuture.set_exceptioncs|t|dSr7)rTrr;r<rr r!r;sz _BaseWaitHandleFuture.set_result) r>r?r@rrJr%rNrTr0r9r;rAr r rr!rB[s   rBcsBeZdZddfdd ZddZfddZfd d ZZS) _WaitCancelFutureNrcstj||||dd|_dS)Nr)rr_done_callback)rreventrGrrr r!rsz_WaitCancelFuture.__init__cCs tddS)Nz'_WaitCancelFuture must not be cancelled) RuntimeErrorr8r r r!r0sz_WaitCancelFuture.cancelcs$t||jdk r ||dSr7)rr;rVr<rr r!r;s  z_WaitCancelFuture.set_resultcs$t||jdk r ||dSr7)rr9rVr:rr r!r9s  z_WaitCancelFuture.set_exception)r>r?r@rr0r;r9rAr r rr!rUs rUcs6eZdZddfdd ZfddZddZZS) _WaitHandleFutureNrcs<tj||||d||_d|_tdddd|_d|_dS)NrTF)rr _proactorZ_unregister_proactorrPZ CreateEvent_event _event_fut)rrrFrGproactorrrr r!rs z_WaitHandleFuture.__init__csF|jdk r"t|jd|_d|_|j|jd|_t|dSr7) r[rI CloseHandler\rZ _unregisterrrrNrLrr r!rNs   z%_WaitHandleFuture._unregister_wait_cbc Cs|js dSd|_|j}d|_zt||jWn`tk r}zB|jtjkr~d||d}|jrh|j|d<|j |WYdSW5d}~XYnX|j |j|j |_dSrO)rErDrPZUnregisterWaitExr[r1rQrRrr2r3rZ _wait_cancelrNr\rSr r r!rTs(    z"_WaitHandleFuture._unregister_wait)r>r?r@rrNrTrAr r rr!rYs rYc@s8eZdZddZddZddZddZd d ZeZd S) PipeServercCs,||_t|_d|_d|_|d|_dSNT)_addressweakrefWeakSet_free_instances_pipe_accept_pipe_future_server_pipe_handle)rr'r r r!rs  zPipeServer.__init__cCs|j|d}|_|SNF)rgri)rtmpr r r!_get_unconnected_pipesz PipeServer._get_unconnected_pipec Csr|r dStjtjB}|r&|tjO}t|j|tjtjBtj Btj t j t j tj tj}t |}|j||Sr7)closedrIZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPipercZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr ZBUFSIZEZNMPWAIT_WAIT_FOREVERNULL PipeHandlerfadd)rfirstflagshpiper r r!ris(     zPipeServer._server_pipe_handlecCs |jdkSr7)rcr8r r r!rmszPipeServer.closedcCsR|jdk r|jd|_|jdk rN|jD] }|q*d|_d|_|jdSr7)rhr0rcrfclosergclear)rrtr r r!rus     zPipeServer.closeN) r>r?r@rrlrirmru__del__r r r r!ras   rac@s eZdZdS)_WindowsSelectorEventLoopN)r>r?r@r r r r!rx,srxcsDeZdZd fdd ZfddZddZdd Zd d d ZZS)r Ncs|dkrt}t|dSr7)rrr)rr]rr r!r3szProactorEventLoop.__init__c s^z||jt W5|jdk rX|jj}|j|dk rR|jsR|j|d|_XdSr7) Z_self_reading_futurerr0r"rZr_ call_soonZ_loop_self_readingr run_foreverrrrr r!rz8s    zProactorEventLoop.run_forevercs8|j|}|IdH}|}|j||d|id}||fS)Naddrextra)rZ connect_pipe_make_duplex_pipe_transport)rprotocol_factoryr'frtprotocoltransr r r!create_pipe_connectionKs  z(ProactorEventLoop.create_pipe_connectioncs.tdfdd gS)Nc s d}zn|rN|}j|r4|WdS}j||did}|dkrdWdSj|}Wnt k r}zF|r| dkr d||d|nj rt jd|ddW5d}~XYn2tjk r|r|YnX|_|dS) Nr|r}rzPipe accept failed)r,r-rtzAccept pipe failed on pipe %rT)exc_info)r=rfdiscardrmrurrlrZ accept_piper1filenor3Z_debugr ZwarningrCancelledErrorrhadd_done_callback)rrtrr4r'loop_accept_piperrZserverr r!rVsH  z>ProactorEventLoop.start_serving_pipe..loop_accept_pipe)N)rary)rrr'r rr!start_serving_pipeSs( z$ProactorEventLoop.start_serving_pipec s|} t||||||||f| |d| } z| IdHWnDttfk rTYn,tk r~| | IdHYnX| S)N)waiterr~) create_future_WindowsSubprocessTransport SystemExitKeyboardInterrupt BaseExceptionruZ_wait) rrargsshellstdinstdoutstderrbufsizer~kwargsrZtranspr r r!_make_subprocess_transports* z,ProactorEventLoop._make_subprocess_transport)N)N) r>r?r@rrzrrrrAr r rr!r 0s  0r c@seZdZd:ddZddZddZdd Zd;d d Zd dZdddZ d?ddZ d@ddZ ddZddZddZd d!Zd"d#ZdAd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1ZdBd2d3Zd4d5Zd6d7Zd8d9Zd S)CrrcCsDd|_g|_ttjtd||_i|_t |_ g|_ t |_ dSrH) r2_resultsrPCreateIoCompletionPortINVALID_HANDLE_VALUErn_iocp_cacherdrerE _unregistered_stopped_serving)rZ concurrencyr r r!rs zIocpProactor.__init__cCs|jdkrtddS)NzIocpProactor is closed)rrXr8r r r! _check_closeds zIocpProactor._check_closedcCsFdt|jdt|jg}|jdkr0|dd|jjd|fS)Nzoverlapped#=%sz result#=%srmz<%s %s> )lenrrrrKrr>join)rr)r r r!__repr__s     zIocpProactor.__repr__cCs ||_dSr7)r2)rrr r r!set_loopszIocpProactor.set_loopNcCs |js|||j}g|_|Sr7)rrJ)rtimeoutrkr r r!selects  zIocpProactor.selectcCs|j}|||Sr7)r2rr;)rvaluerMr r r!_results  zIocpProactor._resultrcCs~||tt}z4t|tjr6||||n|||Wnt k rf| dYSXdd}| |||S)Nc SsRz |WStk rL}z$|jtjtjfkr:t|jnW5d}~XYnXdSr7 getresultr1rQrPZERROR_NETNAME_DELETEDZERROR_OPERATION_ABORTEDConnectionResetErrorrrkeyrr4r r r! finish_recvs  z&IocpProactor.recv..finish_recv) _register_with_iocprP Overlappedrn isinstancesocketZWSARecvrZReadFileBrokenPipeErrorr _registerrconnnbytesrrrrr r r!recvs    zIocpProactor.recvcCs~||tt}z4t|tjr6||||n|||Wnt k rf| dYSXdd}| |||S)Nrc SsRz |WStk rL}z$|jtjtjfkr:t|jnW5d}~XYnXdSr7rrr r r!rs  z+IocpProactor.recv_into..finish_recv) rrPrrnrrZ WSARecvIntorZ ReadFileIntorrr)rrbufrrrrr r r! recv_intos    zIocpProactor.recv_intocCs`||tt}z||||Wntk rH|dYSXdd}||||S)N)rNc SsRz |WStk rL}z$|jtjtjfkr:t|jnW5d}~XYnXdSr7rrr r r!rs  z*IocpProactor.recvfrom..finish_recv) rrPrrnZ WSARecvFromrrrrrr r r!recvfroms   zIocpProactor.recvfromcCs>||tt}|||||dd}||||S)Nc SsRz |WStk rL}z$|jtjtjfkr:t|jnW5d}~XYnXdSr7rrr r r! finish_sends  z(IocpProactor.sendto..finish_send)rrPrrnZ WSASendTorr)rrrrrr|rrr r r!sendtos    zIocpProactor.sendtocCsZ||tt}t|tjr4||||n|||dd}| |||S)Nc SsRz |WStk rL}z$|jtjtjfkr:t|jnW5d}~XYnXdSr7rrr r r!rs  z&IocpProactor.send..finish_send) rrPrrnrrZWSASendrZ WriteFiler)rrrrrrrr r r!sends    zIocpProactor.sendcsv||jtt}|fdd}dd}|||}||}t j ||j d|S)NcsD|td}tjtj|   fS)Nz@P) rstructZpackr setsockoptr SOL_SOCKETrPZSO_UPDATE_ACCEPT_CONTEXT settimeoutZ gettimeoutZ getpeername)rrrrrlistenerr r! finish_accept*sz*IocpProactor.accept..finish_acceptcs4z|IdHWn tjk r.|YnXdSr7)rrru)r.rr r r! accept_coro3s z(IocpProactor.accept..accept_coror) r_get_accept_socketfamilyrPrrnZAcceptExrrr Z ensure_futurer2)rrrrrr.coror rr!accept$s     zIocpProactor.acceptc sjtjkr4t||j}|d|S| zt j WnBt k r}z$|j tjkrtddkrW5d}~XYnXtt}||fdd}|||S)Nrrcs|tjtjdSrH)rrrrrPZSO_UPDATE_CONNECT_CONTEXTrrrrr r!finish_connectVs z,IocpProactor.connect..finish_connect)typerZ SOCK_DGRAMrPZ WSAConnectrr2rr;rZ BindLocalrr1rQerrnoZ WSAEINVALZ getsocknamerrnZ ConnectExr)rrr'rMerrr rr!connect@s"       zIocpProactor.connectc Csb||tt}|d@}|d?d@}||t||||dddd}||||S)Nr rc SsRz |WStk rL}z$|jtjtjfkr:t|jnW5d}~XYnXdSr7rrr r r!finish_sendfileis  z.IocpProactor.sendfile..finish_sendfile) rrPrrnZ TransmitFilermsvcrtZ get_osfhandler) rZsockfileoffsetcountrZ offset_lowZ offset_highrr r r!sendfile_s      zIocpProactor.sendfilecsJ|tt}|}|r0|Sfdd}|||S)Ncs |Sr7)rrrtr r!finish_accept_pipesz4IocpProactor.accept_pipe..finish_accept_pipe)rrPrrnZConnectNamedPiperrr)rrtrZ connectedrr rr!rts    zIocpProactor.accept_pipec srt}zt|}WqhWn0tk rF}z|jtjkr6W5d}~XYnXt|dt}t |IdHqt |S)N) CONNECT_PIPE_INIT_DELAYrPZ ConnectPiper1rQZERROR_PIPE_BUSYminCONNECT_PIPE_MAX_DELAYr sleepr ro)rr'ZdelayrFr4r r r!rs  zIocpProactor.connect_pipecCs|||dSrj)_wait_for_handle)rrFrr r r!wait_for_handleszIocpProactor.wait_for_handlecCs||dd}||_|Srb)rrV)rrWZ done_callbackrMr r r!r`szIocpProactor._wait_cancelcs||dkrtj}nt|d}tt}t||j |j |}|r\t ||||j dnt |||||j djr~jd=fdd}|d|f|j|j <S)N@@rrcsSr7)rJrrr r!finish_wait_for_handlesz=IocpProactor._wait_for_handle..finish_wait_for_handler)rrIINFINITEmathceilrPrrnZRegisterWaitWithQueuerr'rUr2rYrr)rrFrZ _is_cancelmsrrGrr rr!rs*   zIocpProactor._wait_for_handlecCs0||jkr,|j|t||jdddSrH)rErprPrrrrobjr r r!rs  z IocpProactor._register_with_iocpc Cs|t||jd}|jr$|jd=|jsrz|dd|}Wn,tk rf}z||W5d}~XYn X||||||f|j|j <|Sr) rrr2rr"r1r9r;rr')rrrcallbackrrrr r r!rs zIocpProactor._registercCs||j|dSr7)rrrKr{r r r!r_szIocpProactor._unregistercCst|}|d|SrH)rr)rrsr r r!rs  zIocpProactor._get_accept_socketc Cs|dkrt}n0|dkr tdnt|d}|tkr>tdt|j|}|dkrXqZd}|\}}}}z|j|\}} } } WnXt k r|j r|j dd||||fd|dtj fkrt|Yq>YnX| |jkr|q>|s>z| ||| } Wn:tk r@} z|| |j|W5d} ~ XYq>X|| |j|q>|jD]} |j| jdq`|jdS)Nrznegative timeoutrztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r,status)r ValueErrorrrrPZGetQueuedCompletionStatusrrpopKeyErrorr2Z get_debugr3rrIr^rr0Zdoner1r9rrKr;rr'rv)rrrrerrZ transferredrr'rrrrrrr r r!rJsL            zIocpProactor._pollcCs|j|dSr7)rrprr r r! _stop_serving9szIocpProactor._stop_servingc Cs|jdkrdSt|jD]\}\}}}}|r6qt|trBqz |Wqtk r}z6|j dk rd||d}|j r|j |d<|j |W5d}~XYqXqd}t } | |} |jr| t krtd|t | t |} ||qg|_t|jd|_dS)NzCancelling a future failedr+r/g?z,%r is running after closing for %.1f seconds)rlistritemsZ cancelledrrUr0r1r2rr3time monotonicr debugrJrrIr^) rr'rMrrrr4r5Z msg_updateZ start_timeZnext_msgr r r!ru?s@           zIocpProactor.closecCs |dSr7)rur8r r r!rwnszIocpProactor.__del__)r)N)r)r)r)rN)r)N)N)r>r?r@rrrrrrrrrrrrrrrrrr`rrrr_rrJrrurwr r r r!rs6        "    7/rc@seZdZddZdS)rc  sPtj|f|||||d|_fdd}jjtjj} | |dS)N)rrrrrcsj}|dSr7)_procZpollZ_process_exited)r returncoder8r r!rys z4_WindowsSubprocessTransport._start..callback) r Popenrr2rZrintrCr) rrrrrrrrrrr r8r!_startts z"_WindowsSubprocessTransport._startN)r>r?r@rr r r r!rrsrc@seZdZeZdS)rN)r>r?r@r _loop_factoryr r r r!rsrc@seZdZeZdS)rN)r>r?r@r rr r r r!rsr).rPrIrrrrrrrdrrrrrrr r logr __all__rnrZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDrrZFuturerrBrUrYobjectraZBaseSelectorEventLooprxZBaseProactorEventLoopr rZBaseSubprocessTransportrr ZBaseDefaultEventLoopPolicyrrrr r r r!sP         0J4;e`