
    F\hv                        S r SSKr\R                  S:w  a  \" S5      eSSKrSSKrSSKrSSKJr  SSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  Sr\R6                  r\R8                  rSrSrSrSr  " S S\RB                  5      r" " S S\RB                  5      r# " S S\#5      r$ " S S\#5      r% " S S\&5      r' " S S \RP                  5      r) " S! S"\RT                  5      r+ " S# S$5      r, " S% S&\RZ                  5      r.\)r/ " S' S(\R`                  5      r1 " S) S*\R`                  5      r2\2r3\+r4g)+z.Selector and proactor event loops for Windows.    Nwin32z
win32 only)partial   )events)base_subprocess)futures)
exceptions)proactor_events)selector_events)tasks)windows_utils)logger)SelectorEventLoopProactorEventLoopIocpProactorDefaultEventLoopPolicyWindowsSelectorEventLoopPolicyWindowsProactorEventLoopPolicy	EventLoopi  i  gMbP?g?c                   n   ^  \ rS rSrSrSS.U 4S jjrU 4S jrS rSU 4S jjrU 4S	 jr	U 4S
 jr
SrU =r$ )_OverlappedFuture1   z~Subclass of Future which represents an overlapped operation.

Cancelling it will immediately cancel the overlapped operation.
Nloopc                h   > [         TU ]  US9  U R                  (       a  U R                  S	 Xl        g Nr   )super__init___source_traceback_ov)selfovr   	__class__s      -/usr/lib/python3.13/asyncio/windows_events.pyr   _OverlappedFuture.__init__7   s/    d#!!&&r*    c                    > [         TU ]  5       nU R                  bM  U R                  R                  (       a  SOSnUR	                  SSU SU R                  R
                  S S35        U$ )Npending	completedr   zoverlapped=<z, #x>)r   
_repr_infor!   r)   insertaddressr"   infostater$   s      r%   r-   _OverlappedFuture._repr_info=   s\    w!#88!%!1!1I{EKK\%4883C3CB2GqIJr'   c                    U R                   c  g  U R                   R                  5         S U l         g ! [         aK  nSUU S.nU R                  (       a  U R                  US'   U R                  R                  U5         S nANXS nAff = f)Nz&Cancelling an overlapped future failedmessage	exceptionfuturesource_traceback)r!   cancelOSErrorr    _loopcall_exception_handler)r"   exccontexts      r%   _cancel_overlapped$_OverlappedFuture._cancel_overlappedD   s~    88
	7HHOO   	7C G
 %%.2.D.D*+JJ--g66	7s   2 
BABBc                 >   > U R                  5         [        TU ]	  US9$ N)msg)r@   r   r:   r"   rD   r$   s     r%   r:   _OverlappedFuture.cancelT   s     !w~#~&&r'   c                 D   > [         TU ]  U5        U R                  5         g N)r   set_exceptionr@   r"   r7   r$   s     r%   rI   _OverlappedFuture.set_exceptionX   s    i(!r'   c                 2   > [         TU ]  U5        S U l        g rH   )r   
set_resultr!   r"   resultr$   s     r%   rM   _OverlappedFuture.set_result\   s    6"r'   r!   rH   )__name__
__module____qualname____firstlineno____doc__r   r-   r@   r:   rI   rM   __static_attributes____classcell__r$   s   @r%   r   r   1   s5    
 $(   '" r'   r   c                   z   ^  \ rS rSrSrSS.U 4S jjrS rU 4S jrS rS	 r	SU 4S
 jjr
U 4S jrU 4S jrSrU =r$ )_BaseWaitHandleFuturea   z2Subclass of Future which represents a wait handle.Nr   c                   > [         TU ]  US9  U R                  (       a  U R                  S	 Xl        X l        X0l        SU l        g )Nr   r   T)r   r   r    r!   _handle_wait_handle_registered)r"   r#   handlewait_handler   r$   s        r%   r   _BaseWaitHandleFuture.__init__d   sF    d#!!&&r* '  r'   c                 f    [         R                  " U R                  S5      [         R                  :H  $ Nr   )_winapiWaitForSingleObjectr^   WAIT_OBJECT_0r"   s    r%   _poll_BaseWaitHandleFuture._pollr   s)    ++DLL!<%%& 	'r'   c                 (  > [         TU ]  5       nUR                  SU R                  S 35        U R                  b*  U R	                  5       (       a  SOSnUR                  U5        U R
                  b  UR                  SU R
                  S 35        U$ )Nzhandle=r+   signaledwaitingzwait_handle=)r   r-   appendr^   rj   r_   r0   s      r%   r-    _BaseWaitHandleFuture._repr_infow   s~    w!#gdll2./0<<#"&**,,JIEKK(KK,t'8'8&<=>r'   c                     S U l         g rH   rQ   )r"   futs     r%   _unregister_wait_cb)_BaseWaitHandleFuture._unregister_wait_cb   s     r'   c                    U R                   (       d  g SU l         U R                  nS U l         [        R                  " U5        U R                  S 5        g ! [         an  nUR
                  [        R                  :w  aF  SUU S.nU R                  (       a  U R                  US'   U R                  R                  U5         S nAg  S nANS nAff = fNFz$Failed to unregister the wait handler5   r9   )r`   r_   _overlappedUnregisterWaitr;   winerrorERROR_IO_PENDINGr    r<   r=   rs   r"   rb   r>   r?   s       r%   _unregister_wait&_BaseWaitHandleFuture._unregister_wait   s     '' 	&&{3 	  &  
	||{;;;E!$"
 ))262H2HG./

11': <
	s   A 
C AC		Cc                 >   > U R                  5         [        TU ]	  US9$ rC   )r|   r   r:   rE   s     r%   r:   _BaseWaitHandleFuture.cancel   s     w~#~&&r'   c                 D   > U R                  5         [        TU ]	  U5        g rH   )r|   r   rI   rJ   s     r%   rI   #_BaseWaitHandleFuture.set_exception   s    i(r'   c                 D   > U R                  5         [        TU ]	  U5        g rH   )r|   r   rM   rN   s     r%   rM    _BaseWaitHandleFuture.set_result   s    6"r'   )r^   r!   r`   r_   rH   )rR   rS   rT   rU   rV   r   rj   r-   rs   r|   r:   rI   rM   rW   rX   rY   s   @r%   r[   r[   a   s;    <8<    '

'0')# #r'   r[   c                   R   ^  \ rS rSrSrSS.U 4S jjrS rU 4S jrU 4S jrS	r	U =r
$ )
_WaitCancelFuture   zgSubclass of Future which represents a wait for the cancellation of a
_WaitHandleFuture using an event.
Nr   c                0   > [         TU ]  XX4S9  S U l        g )Nr   )r   r   _done_callback)r"   r#   eventrb   r   r$   s        r%   r   _WaitCancelFuture.__init__   s    K;"r'   c                     [        S5      e)Nz'_WaitCancelFuture must not be cancelled)RuntimeErrorri   s    r%   r:   _WaitCancelFuture.cancel   s    DEEr'   c                 b   > [         TU ]  U5        U R                  b  U R                  U 5        g g rH   )r   rM   r   rN   s     r%   rM   _WaitCancelFuture.set_result   s/    6"*% +r'   c                 b   > [         TU ]  U5        U R                  b  U R                  U 5        g g rH   )r   rI   r   rJ   s     r%   rI   _WaitCancelFuture.set_exception   s/    i(*% +r'   )r   )rR   rS   rT   rU   rV   r   r:   rM   rI   rW   rX   rY   s   @r%   r   r      s,     8< # #
F&
& &r'   r   c                   B   ^  \ rS rSrSS.U 4S jjrU 4S jrS rSrU =r$ )_WaitHandleFuture   Nr   c                   > [         TU ]  XX5S9  X@l        SU l        [        R
                  " S SSS 5      U l        S U l        g )Nr   TF)r   r   	_proactor_unregister_proactorrw   CreateEvent_event
_event_fut)r"   r#   ra   rb   proactorr   r$   s         r%   r   _WaitHandleFuture.__init__   sA    [<!$(!!--dD%Fr'   c                    > U R                   b.  [        R                  " U R                   5        S U l         S U l        U R                  R                  U R                  5        S U l        [        TU ]!  U5        g rH   )	r   rf   CloseHandler   r   _unregisterr!   r   rs   )r"   rr   r$   s     r%   rs   %_WaitHandleFuture._unregister_wait_cb   sY    ;;",DK"DO 	""488,#C(r'   c                    U R                   (       d  g SU l         U R                  nS U l         [        R                  " XR                  5        U R                  R                  U R                  U R                  5      U l        g ! [
         an  nUR                  [        R                  :w  aF  SUU S.nU R                  (       a  U R                  US'   U R                  R                  U5         S nAg  S nANS nAff = frv   )r`   r_   rw   UnregisterWaitExr   r;   ry   rz   r    r<   r=   r   _wait_cancelrs   r   r{   s       r%   r|   "_WaitHandleFuture._unregister_wait   s     '' 	((kkB ..55dkk6:6N6NP  
	||{;;;E!$"
 ))262H2HG./

11': <
	s    B 
C<AC77C<)r   r   r   r`   r   r_   )	rR   rS   rT   rU   r   rs   r|   rW   rX   rY   s   @r%   r   r      s!    BF  )$P Pr'   r   c                   :    \ rS rSrSrS rS rS rS rS r	\	r
Srg	)

PipeServer   zPClass representing a pipe server.

This is much like a bound, listening socket.
c                     Xl         [        R                  " 5       U l        S U l        S U l        U R                  S5      U l        g NT)_addressweakrefWeakSet_free_instances_pipe_accept_pipe_future_server_pipe_handle)r"   r/   s     r%   r   PipeServer.__init__   s9    &0 
#' --d3
r'   c                 J    U R                   U R                  S5      sol         U$ )NF)r   r   )r"   tmps     r%   _get_unconnected_pipe PipeServer._get_unconnected_pipe  s#    
 **d&>&>u&EZ
r'   c           
      D   U R                  5       (       a  g [        R                  [        R                  -  nU(       a  U[        R                  -  n[        R
                  " U R                  U[        R                  [        R                  -  [        R                  -  [        R                  [        R                  [        R                  [        R                  [        R                  5      n[        R                  " U5      nU R                   R#                  U5        U$ rH   )closedrf   PIPE_ACCESS_DUPLEXFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCECreateNamedPiper   PIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE	PIPE_WAITPIPE_UNLIMITED_INSTANCESr   BUFSIZENMPWAIT_WAIT_FOREVERNULL
PipeHandler   add)r"   firstflagshpipes        r%   r   PipeServer._server_pipe_handle  s    ;;==**W-I-IIW:::E##MM5%%(E(EE,,!!=#8#8((',,8 ''*  &r'   c                     U R                   S L $ rH   )r   ri   s    r%   r   PipeServer.closed   s    %&r'   c                    U R                   b!  U R                   R                  5         S U l         U R                  bL  U R                   H  nUR	                  5         M     S U l        S U l        U R                  R                  5         g g rH   )r   r:   r   r   closer   clear)r"   r   s     r%   r   PipeServer.close#  sp    ##/$$++-'+D$==$,,

 -DJ DM  &&( %r'   )r   r   r   r   N)rR   rS   rT   rU   rV   r   r   r   r   r   __del__rW    r'   r%   r   r      s'    4$'
) Gr'   r   c                       \ rS rSrSrSrg)_WindowsSelectorEventLoopi2  z'Windows version of selector event loop.r   N)rR   rS   rT   rU   rV   rW   r   r'   r%   r   r   2  s    1r'   r   c                   `   ^  \ rS rSrSrS
U 4S jjrU 4S jrU 4S jrS rS r	 S
S jr
S	rU =r$ )r   i6  z2Windows version of proactor event loop using IOCP.c                 >   > Uc
  [        5       n[        TU ]	  U5        g rH   )r   r   r   )r"   r   r$   s     r%   r   ProactorEventLoop.__init__9  s    #~H"r'   c                 v   > U R                   b   eU R                  U R                  5        [        TU ]  5         g rH   )_self_reading_future	call_soon_loop_self_readingr   _run_forever_setup)r"   r$   s    r%   r   $ProactorEventLoop._run_forever_setup>  s2    ((000t../"$r'   c                 
  > [         TU ]  5         U R                  bg  U R                  R                  nU R                  R	                  5         Ub,  UR
                  (       d  U R                  R                  U5        S U l        g g rH   )r   _run_forever_cleanupr   r!   r:   r)   r   r   )r"   r#   r$   s     r%   r   &ProactorEventLoop._run_forever_cleanupC  si    $&$$0**..B%%,,. ~bjj**2.(,D% 1r'   c                    #    U R                   R                  U5      nUI S h  vN nU" 5       nU R                  XESU0S9nXe4$  N 7f)Naddrextra)r   connect_pipe_make_duplex_pipe_transport)r"   protocol_factoryr/   fr   protocoltranss          r%   create_pipe_connection(ProactorEventLoop.create_pipe_connectionR  sU     NN''0w#%008>7H 1 J	 s   !AA!Ac                 j   ^ ^^^^#    [        T5      mSUUUU U4S jjmT R                  T5        T/$ 7f)Nc                   > S n U (       aj  U R                  5       nTR                  R                  U5        TR                  5       (       a  UR	                  5         g T" 5       nTR                  XST0S9  TR                  5       nUc  g TR                  R                  U5      n U Tl	        U R                  T5        g ! [         a?    U(       a$  UR                  5       S:w  a  UR	                  5         TR                  T5         g [         a  nU(       a:  UR                  5       S:w  a&  TR                  SUUS.5        UR	                  5         O'TR                   (       a  ["        R$                  " SUSS9  TR                  T5         S nAg S nAf[&        R(                   a    U(       a  UR	                  5          g  g f = f)	Nr   r   r   zPipe accept failed)r6   r7   r   zAccept pipe failed on pipe %rT)exc_info)rO   r   discardr   r   r   r   r   accept_piper   add_done_callbackBrokenPipeErrorfilenor   r;   r=   _debugr   warningr	   CancelledError)	r   r   r   r>   r/   loop_accept_piper   r"   servers	       r%   r   >ProactorEventLoop.start_serving_pipe.<locals>.loop_accept_pipe]  st   D)688:D**2248}} 

/1H44vw.? 5 A 335<NN..t4* ./*##$45+ # 1DKKMR/JJL/0 1DKKMR///#7%( $1 
 JJL[[NN#B#'$8/00,, !JJL !s2   AB> ,B> 
B> >AG 	G A9F.G ?G rH   )r   r   )r"   r   r/   r   r   s   ```@@r%   start_serving_pipe$ProactorEventLoop.start_serving_pipeZ  s1     G$+	6 +	6Z 	'(xs   ,3c	           
         #    U R                  5       n
[        XX#XEXg4XS.U	D6n U
I S h  vN   U$  N! [        [        4 a    e [         a+    UR                  5         UR                  5       I S h  vN    e f = f7f)N)waiterr   )create_future_WindowsSubprocessTransport
SystemExitKeyboardInterruptBaseExceptionr   _wait)r"   r   argsshellstdinstdoutstderrbufsizer   kwargsr   transps               r%   _make_subprocess_transport,ProactorEventLoop._make_subprocess_transport  s      ##%,TT-2F74:7 067	LL  -. 	 	LLN,,.  	s1   "A;3 13 A;3 =A80A31A88A;)r   rH   )rR   rS   rT   rU   rV   r   r   r   r   r   r  rW   rX   rY   s   @r%   r   r   6  s/    <#
%
-1j 04 r'   r   c                   
   \ rS rSrSr\4S jrS rS rS r	S#S jr
S	 r\S
 5       r\S 5       rS$S jrS$S jrS$S jrS$S jrS%S jrS$S jrS rS rS rS rS rS#S jrS rS rS rS rS r S r!S#S jr"S r#S  r$S! r%S"r&g)&r   i  z#Proactor implementation using IOCP.c                    S U l         / U l        [        R                  " [        R                  [
        SU5      U l        0 U l        [        R                  " 5       U l
        / U l        [        R                  " 5       U l        g re   )r<   _resultsrw   CreateIoCompletionPortINVALID_HANDLE_VALUEr   _iocp_cacher   r   r`   _unregistered_stopped_serving)r"   concurrencys     r%   r   IocpProactor.__init__  s_    
 77,,dA{D
"??, ' 1r'   c                 4    U R                   c  [        S5      eg )NzIocpProactor is closed)r  r   ri   s    r%   _check_closedIocpProactor._check_closed  s    ::788 r'   c                     S[        U R                  5      -  S[        U R                  5      -  /nU R                  c  UR	                  S5        SU R
                  R                  < SSR                  U5      < S3$ )Nzoverlapped#=%sz
result#=%sr   < r,   )lenr  r  r  ro   r$   rR   join)r"   r1   s     r%   __repr__IocpProactor.__repr__  s_     3t{{#33s4==113::KK! NN33SXXd^DDr'   c                     Xl         g rH   )r<   )r"   r   s     r%   set_loopIocpProactor.set_loop  s    
r'   Nc                     U R                   (       d  U R                  U5        U R                   n/ U l          US n$ ! S nf = frH   )r  rj   )r"   timeoutr   s      r%   selectIocpProactor.select  s:    }}JJwmm	 C$Cs   ; ?c                 \    U R                   R                  5       nUR                  U5        U$ rH   )r<   r   rM   )r"   valuerr   s      r%   _resultIocpProactor._result  s%    jj&&(u
r'   c                      UR                  5       $ ! [         aF  nUR                  [        R                  [        R
                  4;   a  [        UR                  6 ee S nAff = frH   )	getresultr;   ry   rw   ERROR_NETNAME_DELETEDERROR_OPERATION_ABORTEDConnectionResetErrorr  )r   keyr#   r>   s       r%   finish_socket_funcIocpProactor.finish_socket_func  sY    	<<>! 	|| A A + C C E E*CHH55	s    
A"AAA"c                     U R                  XU5      $ ! [         a-  nUR                  [        R                  :X  a	  US 4s S nA$ e S nAff = frH   )r4  r;   ry   rw   ERROR_PORT_UNREACHABLE)clsr   r3  r#   empty_resultr>   s         r%   _finish_recvfromIocpProactor._finish_recvfrom  sL    	))%b99 	 ||{AAA#T))	s    
A!AAAAc                    U R                  U5        [        R                  " [        5      n [	        U[
        R
                  5      (       a!  UR                  UR                  5       X#5        O!UR                  UR                  5       U5         U R                  XAU R                  5      $ ! [         a    U R                  S5      s $ f = f)Nr'   )_register_with_iocprw   
Overlappedr   
isinstancesocketWSARecvr   ReadFiler   r,  	_registerr4  r"   connnbytesr   r#   s        r%   recvIocpProactor.recv  s      &##D)	%$..

4;;=&8DKKM62 ~~b(?(?@@  	%<<$$	%   ?B* - B* *CCc                    U R                  U5        [        R                  " [        5      n [	        U[
        R
                  5      (       a!  UR                  UR                  5       X#5        O!UR                  UR                  5       U5         U R                  XAU R                  5      $ ! [         a    U R                  S5      s $ f = fre   )r=  rw   r>  r   r?  r@  WSARecvIntor   ReadFileIntor   r,  rC  r4  r"   rE  bufr   r#   s        r%   	recv_intoIocpProactor.recv_into  s      &##D)	#$..t{{}c9s3 ~~b(?(?@@  	#<<?"	#rI  c           	      $   U R                  U5        [        R                  " [        5      n UR	                  UR                  5       X#5        U R                  XA[        U R                  SS95      $ ! [         a    U R                  S5      s $ f = f)N)r'   Nr'   r9  )r=  rw   r>  r   WSARecvFromr   r   r,  rC  r   r:  rD  s        r%   recvfromIocpProactor.recvfrom  s      &##D)	-NN4;;=&8 ~~b0E0E=@)B C 	C  	-<<,,	-    A1 1BBc           	      $   U R                  U5        [        R                  " [        5      n UR	                  UR                  5       X#5        U R                  XA[        U R                  SS95      $ ! [         a    U R                  S5      s $ f = f)Nr   Nr   rR  )r=  rw   r>  r   WSARecvFromIntor   r   r,  rC  r   r:  rM  s        r%   recvfrom_intoIocpProactor.recvfrom_into  s      &##D)	+t{{}c9 ~~b0E0E=>)@ A 	A  	+<<	**	+rV  c                     U R                  U5        [        R                  " [        5      nUR	                  UR                  5       X#U5        U R                  XQU R                  5      $ rH   )r=  rw   r>  r   	WSASendTor   rC  r4  )r"   rE  rN  r   r   r#   s         r%   sendtoIocpProactor.sendto  sM      &##D)
T[[]C5~~b(?(?@@r'   c                 P   U R                  U5        [        R                  " [        5      n[	        U[
        R
                  5      (       a!  UR                  UR                  5       X#5        O UR                  UR                  5       U5        U R                  XAU R                  5      $ rH   )r=  rw   r>  r   r?  r@  WSASendr   	WriteFilerC  r4  rM  s        r%   sendIocpProactor.send  sp      &##D)dFMM**JJt{{}c1LL,~~b(?(?@@r'   c                 z  ^^ U R                  T5        U R                  TR                  5      m[        R                  " [
        5      nUR                  TR                  5       TR                  5       5        UU4S jnS nU R                  UTU5      nU" UT5      n[        R                  " X`R                  S9  U$ )Nc                 .  > UR                  5         [        R                  " STR                  5       5      nTR	                  [
        R                  [        R                  U5        TR                  TR                  5       5        TTR                  5       4$ )Nz@P)r/  structpackr   
setsockoptr@  
SOL_SOCKETrw   SO_UPDATE_ACCEPT_CONTEXT
settimeout
gettimeoutgetpeername)r   r3  r#   rN  rE  listeners       r%   finish_accept*IocpProactor.accept.<locals>.finish_accept+  sl    LLN++dHOO$56COOF--'@@#GOOH//12))+++r'   c                 x   #     U I S h  vN   g  N! [         R                   a    UR                  5         e f = f7frH   )r	   r   r   )r8   rE  s     r%   accept_coro(IocpProactor.accept.<locals>.accept_coro4  s1     ,, 

s    :  : &7:r   )r=  _get_accept_socketfamilyrw   r>  r   AcceptExr   rC  r   ensure_futurer<   )r"   ro  r#   rp  rs  r8   cororE  s    `     @r%   acceptIocpProactor.accept%  s      *&&x7##D)
HOO%t{{}5	,	 Hm<64(Dzz2r'   c                   ^ TR                   [        R                  :X  aR  [        R                  " TR                  5       U5        U R                  R                  5       nUR                  S 5        U$ U R                  T5         [        R                  " TR                  5       TR                  5        [        R"                  " [$        5      nUR'                  TR                  5       U5        U4S jnU R)                  UTU5      $ ! [         aA  nUR                  [        R                  :w  a  e TR!                  5       S   S:X  a  e  S nANS nAff = f)Nr   r   c                    > UR                  5         TR                  [        R                  [        R
                  S5        T$ re   )r/  ri  r@  rj  rw   SO_UPDATE_CONNECT_CONTEXT)r   r3  r#   rE  s      r%   finish_connect,IocpProactor.connect.<locals>.finish_connectW  s1    LLNOOF--'AA1FKr'   )typer@  
SOCK_DGRAMrw   
WSAConnectr   r<   r   rM   r=  	BindLocalrv  r;   ry   errno	WSAEINVALgetsocknamer>  r   	ConnectExrC  )r"   rE  r/   rr   er#   r  s    `     r%   connectIocpProactor.connectA  s    99))) ""4;;=':****,CNN4 J  &	!!$++-= ##D)
T[[]G,	 ~~b$77!  	zzU__,!!$) *		s   /D 
E7EEc           	      6   U R                  U5        [        R                  " [        5      nUS-  nUS-	  S-  nUR	                  UR                  5       [        R                  " UR                  5       5      XgUSS5        U R                  XQU R                  5      $ )Nl        r   )
r=  rw   r>  r   TransmitFiler   msvcrtget_osfhandlerC  r4  )r"   sockfileoffsetcountr#   
offset_lowoffset_highs           r%   sendfileIocpProactor.sendfile`  s      &##D)k)
|{2
,,T[[];"q!	%
 ~~b(?(?@@r'   c                    ^ U R                  T5        [        R                  " [        5      nUR	                  TR                  5       5      nU(       a  U R                  T5      $ U4S jnU R                  UTU5      $ )Nc                 (   > UR                  5         T$ rH   )r/  )r   r3  r#   r   s      r%   finish_accept_pipe4IocpProactor.accept_pipe.<locals>.finish_accept_pipew  s    LLNKr'   )r=  rw   r>  r   ConnectNamedPiper   r,  rC  )r"   r   r#   	connectedr  s    `   r%   r   IocpProactor.accept_pipel  sf      &##D)''6	 <<%%	 ~~b$(:;;r'   c                 H  #    [         n  [        R                  " U5      n [        R                  " U5      $ ! [         a)  nUR                  [        R
                  :w  a  e  S nAOS nAff = f[        US-  [        5      n[        R                  " U5      I S h  vN    M  7f)N   )CONNECT_PIPE_INIT_DELAYrw   ConnectPiper;   ry   ERROR_PIPE_BUSYminCONNECT_PIPE_MAX_DELAYr   sleepr   r   )r"   r/   delayra   r>   s        r%   r   IocpProactor.connect_pipe}  s     '$009 ''//  <<;#>#>> ?
 	#9:E++e$$$ s7   B"8 B"
A+A&!B"&A++/B"BB"c                 &    U R                  XS5      $ )zWait for a handle.

Return a Future object. The result of the future is True if the wait
completed, or False if the wait did not complete (on timeout).
F)_wait_for_handle)r"   ra   r'  s      r%   wait_for_handleIocpProactor.wait_for_handle  s     $$Ve<<r'   c                 8    U R                  US S5      nX#l        U$ r   )r  r   )r"   r   done_callbackrr   s       r%   r   IocpProactor._wait_cancel  s#    ##E46 +
r'   c                   ^ U R                  5         Uc  [        R                  nO[        R                  " US-  5      n[
        R                  " [        5      n[
        R                  " XR                  UR                  U5      nU(       a  [        XQX`R                  S9mO[        XQX`U R                  S9mTR                  (       a  TR                  S	 U4S jnTUSU4U R                  UR                  '   T$ )N     @@r   r   c                 $   > TR                  5       $ rH   )rj   )r   r3  r#   r   s      r%   finish_wait_for_handle=IocpProactor._wait_for_handle.<locals>.finish_wait_for_handle  s     779r'   r   )r  rf   INFINITEmathceilrw   r>  r   RegisterWaitWithQueuer  r/   r   r<   r   r    r  )	r"   ra   r'  
_is_cancelmsr#   rb   r  r   s	           @r%   r  IocpProactor._wait_for_handle  s    ?!!B 7S=)B ##D)!77JJ

B0!"k

KA!"k'+zz3A##B'	 $%b!-C"DBJJr'   c                     XR                   ;  aM  U R                   R                  U5        [        R                  " UR	                  5       U R
                  SS5        g g re   )r`   r   rw   r  r   r  r"   objs     r%   r=   IocpProactor._register_with_iocp  sG     &&&  %..szz|TZZAN 'r'   c                 h   U R                  5         [        XR                  S9nUR                  (       a  UR                  S	 UR                  (       d   U" S S U5      nUR                  U5        XAX#4U R                  UR                  '   U$ ! [         a  nUR                  U5         S nAN=S nAff = fr   )
r  r   r<   r    r)   rM   r;   rI   r  r/   )r"   r#   r  callbackr   r+  r  s          r%   rC  IocpProactor._register  s    
 bzz2##B'zz
$ tR0 U# $%#"8BJJ  #""#s   
B 
B1B,,B1c                 Z    U R                  5         U R                  R                  U5        g)zUnregister an overlapped object.

Call this method when its future has been cancelled. The event can
already be signalled (pending in the proactor event queue). It is also
safe if the event is never signalled (because it was cancelled).
N)r  r  ro   )r"   r#   s     r%   r   IocpProactor._unregister  s$     	!!"%r'   c                 T    [         R                   " U5      nUR                  S5        U$ re   )r@  rl  )r"   rv  ss      r%   ru  IocpProactor._get_accept_socket  s     MM&!	Qr'   c           	      H   Uc  [         nO?US:  a  [        S5      e[        R                  " US-  5      nU[         :  a  [        S5      e [        R
                  " U R                  U5      nUc  OSnUu  pEpg U R                  R                  U5      u  ppXR                   ;   a  UR#                  5         OMUR%                  5       (       d8   U" XVU	5      nUR'                  U5        U R(                  R+                  U5        S nM  U R0                   H)  n	U R                  R                  U	R2                  S 5        M+     U R0                  R5                  5         g ! [         as    U R                  R                  5       (       a#  U R                  R                  SSXEXg4-  S.5        US[        R                  4;  a  [        R                  " U5         GM  f = f! [,         a7  nUR/                  U5        U R(                  R+                  U5         S nAGNS nAff = f! S nf = f)Nr   znegative timeoutr  ztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r6   status)r  
ValueErrorr  r  rw   GetQueuedCompletionStatusr  r  popKeyErrorr<   	get_debugr=   r  rf   r   r  r:   donerM   r  ro   r;   rI   r  r/   r   )r"   r'  r  r  errtransferredr3  r/   r   r#   r  r  r+  r  s                 r%   rj   IocpProactor._poll  s   ?Bq[/00 7S=)BX~ !233 ::4::rJF~B-3*Cc'+{{w'?$s  +++
 VVXX	$[r:E
 LL'MM((+AM R $$BKKOOBJJ- %  "E  ::''))JJ55%7#N&)%E$F7  q+"B"BCC'',,  ,OOA&MM((++, AsC   8E 	G ,H A8GG
H#,HH HH H!c                 :    U R                   R                  U5        g rH   )r  r   r  s     r%   _stop_servingIocpProactor._stop_serving3  s     	!!#&r'   c                    U R                   c  g [        U R                  R                  5       5       HE  u  pp4UR	                  5       (       a  M  [        U[        5      (       a  M4   UR                  5         MG     Sn[        R                  " 5       nX-   n	U R                  (       a  U	[        R                  " 5       ::  aF  [        R                  " SU [        R                  " 5       U-
  5        [        R                  " 5       U-   n	U R!                  U5        U R                  (       a  M  / U l        [$        R&                  " U R                   5        S U l         g ! [         aa  nU R                  bH  SUUS.nUR                  (       a  UR                  US'   U R                  R                  U5         S nAGM   S nAGM  S nAff = f)NzCancelling a future failedr5   r9   g      ?z,%r is running after closing for %.1f seconds)r  listr  values	cancelledr?  r   r:   r;   r<   r    r=   time	monotonicr   debugrj   r  rf   r   )
r"   rr   r#   r  r  r>   r?   
msg_update
start_timenext_msgs
             r%   r   IocpProactor.close9  sc   :: '+4;;+=+=+?&@"CS}}C!233CJJL 'A0 
^^%
*kk4>>++K!4>>#3j#@B>>+j8 JJz" kkk DJJ'
;  	Czz-'C),&)#
 00:=:O:OG$67

99'BB .	Cs   'E
G#AF??Gc                 $    U R                  5         g rH   )r   ri   s    r%   r   IocpProactor.__del__h  s    

r'   )r  r  r<   r`   r  r  r  rH   )r   rX  )'rR   rS   rT   rU   rV   r  r   r  r!  r$  r(  r,  staticmethodr4  classmethodr:  rG  rO  rT  rZ  r^  rc  rz  r  r  r   r   r  r   r  r=  rC  r   ru  rj   r  r   r   rW   r   r'   r%   r   r     s    -#+ 29E	
   	 	AA	C	AAA88>
A<"0&= DO@&
7#r'-^r'   r   c                       \ rS rSrS rSrg)r   il  c           	         ^  [         R                  " U4X#XEUS.UD6T l        U 4S jnT R                  R                  R                  [        T R                  R                  5      5      n	U	R                  U5        g )N)r  r  r  r  r	  c                 \   > TR                   R                  5       nTR                  U5        g rH   )_procpoll_process_exited)r   
returncoder"   s     r%   r  4_WindowsSubprocessTransport._start.<locals>.callbacks  s!    *J  ,r'   )	r   Popenr  r<   r   r  intr^   r   )
r"   r  r  r  r  r  r	  r
  r  r   s
   `         r%   _start"_WindowsSubprocessTransport._startn  sk    "(('6'%'
	- JJ  00TZZ5G5G1HI	H%r'   )r  N)rR   rS   rT   rU   r  rW   r   r'   r%   r   r   l  s    
&r'   r   c                       \ rS rSr\rSrg)r   i~  r   N)rR   rS   rT   rU   r   _loop_factoryrW   r   r'   r%   r   r   ~      %Mr'   r   c                       \ rS rSr\rSrg)r   i  r   N)rR   rS   rT   rU   r   r  rW   r   r'   r%   r   r     r  r'   r   )5rV   sysplatformImportErrorrw   rf   r  	functoolsr   r  r  r@  rg  r  r    r   r   r   r	   r
   r   r   r   logr   __all__r   r  ERROR_CONNECTION_REFUSEDERROR_CONNECTION_ABORTEDr  r  Futurer   r[   r   r   objectr   BaseSelectorEventLoopr   BaseProactorEventLoopr   r   BaseSubprocessTransportr   r   BaseDefaultEventLoopPolicyr   r   r   r   r   r'   r%   <module>r     sa   4 
<<7
l
##                    ||       - -`G#GNN G#T&- &01P- 1Ph8 8v2 E E 2h== hVH HV&/"I"I & . &V%F%F &&V%F%F & 8 	r'   