
    F\hׂ                        S r S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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 " S S\R*                  \R,                  5      r " S S\\R0                  5      r " S S\\R4                  5      r " S S\5      r " S S\\R:                  5      r " S S\\\R>                  5      r  " S S\\\R>                  5      r! " S S\
RD                  5      r#g)zEvent loop using a proactor and related classes.

A proactor is a "notify-on-completion" multiplexer.  Currently a
proactor is only implemented on Windows with IOCP.
)BaseProactorEventLoop    N   )base_events)	constants)futures)
exceptions)	protocols)sslproto)
transports)trsock)loggerc                    [         R                  " U5      U R                  S'    UR                  5       U R                  S'   SU R                  ;  a   UR                  5       U R                  S'   g g ! [        R
                   a8    U R                  R                  5       (       a  [        R                  " SUSS9   N{f = f! [        R
                   a    S U R                  S'    g f = f)Nsocketsocknamezgetsockname() failed on %rTexc_infopeername)r   TransportSocket_extragetsocknamer   error_loop	get_debugr   warninggetpeername)	transportsocks     ./usr/lib/python3.13/asyncio/proactor_events.py_set_socket_extrar      s    !'!7!7!=IXC'+'7'7'9	$ )))	0+/+;+;+=IZ( * << C??$$&&NN,dTCC || 	0+/IZ(	0s$   A2 C 2A	B>=B>#C'&C'c                      ^  \ rS rSrSr  SU 4S jjrS rS rS rS r	S r
S	 r\R                  4S
 jrSS jrS rS rS rSrU =r$ )_ProactorBasePipeTransport.   z*Base class for pipe and socket transports.c                   > [         TU ]  XQ5        U R                  U5        X l        U R	                  U5        X`l        S U l        S U l        S U l        SU l	        SU l
        SU l        SU l        SU l        U R
                  b  U R
                  R                  U 5        U R                  R!                  U R"                  R$                  U 5        Ub,  U R                  R!                  [&        R(                  US 5        g g )Nr   F)super__init__
_set_extra_sockset_protocol_server_buffer	_read_fut
_write_fut_pending_write
_conn_lost_closing_called_connection_lost_eof_written_attachr   	call_soon	_protocolconnection_mader   _set_result_unless_cancelledselfloopr   protocolwaiterextraserver	__class__s          r   r%   #_ProactorBasePipeTransport.__init__2   s    %
(#',$!<<#LL  &

T^^;;TBJJ  !E!E!'/     c                    U R                   R                  /nU R                  c  UR                  S5        O"U R                  (       a  UR                  S5        U R                  b,  UR                  SU R                  R                  5        35        U R                  b  UR                  SU R                  < 35        U R                  b  UR                  SU R                  < 35        U R                  (       a'  UR                  S[        U R                  5       35        U R                  (       a  UR                  S5        SR                  S	R                  U5      5      $ )
Nclosedclosingzfd=zread=zwrite=zwrite_bufsize=zEOF writtenz<{}> )r>   __name__r'   appendr/   filenor+   r,   r*   lenr1   formatjoin)r8   infos     r   __repr__#_ProactorBasePipeTransport.__repr__I   s    ''(::KK!]]KK	"::!KK#djj//1234>>%KK%123??&KK& 345<<KK.T\\):(;<=KK&}}SXXd^,,r@   c                      XR                   S'   g )Npipe)r   r8   r   s     r   r&   %_ProactorBasePipeTransport._set_extra[   s    "Fr@   c                     Xl         g Nr4   )r8   r:   s     r   r(   '_ProactorBasePipeTransport.set_protocol^   s    !r@   c                     U R                   $ rS   rT   r8   s    r   get_protocol'_ProactorBasePipeTransport.get_protocola   s    ~~r@   c                     U R                   $ rS   )r/   rW   s    r   
is_closing%_ProactorBasePipeTransport.is_closingd   s    }}r@   c                 F   U R                   (       a  g SU l         U =R                  S-  sl        U R                  (       d3  U R                  c&  U R                  R                  U R                  S 5        U R                  b"  U R                  R                  5         S U l        g g )NTr   )	r/   r.   r*   r,   r   r3   _call_connection_lostr+   cancelrW   s    r   close _ProactorBasePipeTransport.closeg   sq    ==1|| 7JJ  !;!;TB>>%NN!!#!DN &r@   c                 t    U R                   b+  U" SU < 3[        U S9  U R                   R                  5         g g )Nzunclosed transport )source)r'   ResourceWarningr`   )r8   _warns     r   __del__"_ProactorBasePipeTransport.__del__r   s5    ::!'x0/$OJJ "r@   c                 >    [        U[        5      (       a6  U R                  R                  5       (       a  [        R
                  " SXSS9  O*U R                  R                  UUU U R                  S.5        U R                  U5        g ! U R                  U5        f = f)Nz%r: %sTr   )message	exceptionr   r:   )	
isinstanceOSErrorr   r   r   debugcall_exception_handlerr4   _force_close)r8   excri   s      r   _fatal_error'_ProactorBasePipeTransport._fatal_errorw   s~    	##w''::''))LL44H

11&!$!% $	3  c"Dc"s   A5B	 	Bc                 ~   U R                   bY  U R                   R                  5       (       d:  Uc  U R                   R                  S 5        OU R                   R                  U5        U R                  (       a  U R
                  (       a  g SU l        U =R                  S-  sl        U R                  (       a!  U R                  R                  5         S U l        U R                  (       a!  U R                  R                  5         S U l	        SU l
        S U l        U R                  R                  U R                  U5        g )NTr   r   )_empty_waiterdone
set_resultset_exceptionr/   r0   r.   r,   r_   r+   r-   r*   r   r3   r^   )r8   rp   s     r   ro   '_ProactorBasePipeTransport._force_close   s    )$2D2D2I2I2K2K{""--d3""005==T991??OO""$"DO>>NN!!#!DN

T77=r@   c                 .   U R                   (       a  g  U R                  R                  U5        [        U R                  S5      (       aG  U R                  R                  5       S:w  a)  U R                  R                  [        R                  5        U R                  R                  5         S U l        U R                  nUb  UR                  U 5        S U l
        SU l         g ! [        U R                  S5      (       aG  U R                  R                  5       S:w  a)  U R                  R                  [        R                  5        U R                  R                  5         S U l        U R                  nUb  UR                  U 5        S U l
        SU l         f = f)NshutdownT)r0   r4   connection_losthasattrr'   rG   rz   r   	SHUT_RDWRr`   r)   _detach)r8   rp   r=   s      r   r^   0_ProactorBasePipeTransport._call_connection_lost   s'   ''	0NN**3/ tzz:..4::3D3D3F"3L

##F$4$45JJDJ\\F!t$#+/D( tzz:..4::3D3D3F"3L

##F$4$45JJDJ\\F!t$#+/D(s   C! !B3Fc                 h    U R                   nU R                  b  U[        U R                  5      -  nU$ rS   )r-   r*   rH   )r8   sizes     r   get_write_buffer_size0_ProactorBasePipeTransport.get_write_buffer_size   s/    ""<<#C%%Dr@   )r*   r0   r/   r.   r1   r-   r4   r+   r)   r'   r,   NNN)zFatal error on pipe transport)rE   
__module____qualname____firstlineno____doc__r%   rL   r&   r(   rX   r[   r`   warningswarnrf   rq   ro   r^   r   __static_attributes____classcell__r>   s   @r   r!   r!   .   sV    448$(/.-$#"	" %MM 
#>(0( r@   r!   c                   \   ^  \ rS rSrSr  SU 4S jjrS rS rS rS r	S r
SS	 jrS
rU =r$ )_ProactorReadPipeTransport   zTransport for read pipes.c                    > SU l         SU l        [        TU ]  XX4XV5        [	        U5      U l        U R                  R                  U R                  5        SU l        g )Nr{   TF)	_pending_data_length_pausedr$   r%   	bytearray_datar   r3   _loop_reading)	r8   r9   r   r:   r;   r<   r=   buffer_sizer>   s	           r   r%   #_ProactorReadPipeTransport.__init__   sN    $&!XuE{+


T//0r@   c                 T    U R                   (       + =(       a    U R                  (       + $ rS   )r   r/   rW   s    r   
is_reading%_ProactorReadPipeTransport.is_reading   s    <<5$55r@   c                     U R                   (       d  U R                  (       a  g SU l        U R                  R                  5       (       a  [        R
                  " SU 5        g g )NTz%r pauses reading)r/   r   r   r   r   rm   rW   s    r   pause_reading(_ProactorReadPipeTransport.pause_reading   sB    ==DLL ::!!LL,d3 "r@   c                    U R                   (       d  U R                  (       d  g SU l        U R                  c&  U R                  R	                  U R
                  S 5        U R                  nSU l        US:  a4  U R                  R	                  U R                  U R                  S U U5        U R                  R                  5       (       a  [        R                  " SU 5        g g )NFr{   z%r resumes reading)r/   r   r+   r   r3   r   r   _data_receivedr   r   r   rm   )r8   lengths     r   resume_reading)_ProactorReadPipeTransport.resume_reading   s    ==>>!JJ  !3!3T:**$&!B; JJ  !4!4djj&6I6R::!!LL-t4 "r@   c                 H   U R                   R                  5       (       a  [        R                  " SU 5         U R                  R                  5       nU(       d  U R                  5         g g ! [        [        4 a    e [         a  nU R                  US5         S nAg S nAff = f)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.)r   r   r   rm   r4   eof_received
SystemExitKeyboardInterruptBaseExceptionrq   r`   )r8   	keep_openrp   s      r   _eof_received(_ProactorReadPipeTransport._eof_received   s    ::!!LL*D1	335I JJL  -. 	 	HJ	s   A+ +B!BB!c                    U R                   (       a  U R                  S:X  d   eX l        g US:X  a  U R                  5         g [        U R                  [
        R                  5      (       a#   [
        R                  " U R                  U5        g U R                  R                  U5        g ! [        [        4 a    e [         a  nU R                  US5         S nAg S nAff = f)Nr{   r   z3Fatal error: protocol.buffer_updated() call failed.)r   r   r   rk   r4   r	   BufferedProtocol_feed_data_to_buffered_protor   r   r   rq   data_received)r8   datar   rp   s       r   r   )_ProactorReadPipeTransport._data_received   s    << ,,222(.%Q; dnni&@&@AA66t~~tL NN((.  12   !!##12 	s   ,!B* *C CC c                    SnS n Ub  U R                   UL d   U R                   c  U R                  (       d   eS U l         UR                  5       (       aR  UR                  5       nUS:X  a   US:  a  U R	                  X25        g g [        [        U R                  5      S U 5      nOUR                  5         U R                  (       a   US:  a  U R	                  X25        g g U R                  (       d?  U R                  R                  R                  U R                  U R                  5      U l         U R                  (       d%  U R                   R                  U R                  5        US:  a  U R	                  X25        g g ! [          af  nU R                  (       d  U R#                  US5         S nANKU R                  R%                  5       (       a  [&        R(                  " SSS9   S nANS nAf[*         a  nU R-                  U5         S nANS nAf[.         a  nU R#                  US5         S nANS nAf[0        R2                   a    U R                  (       d  e  Nf = f! US:  a  U R	                  X25        f f = f)Nr{   r   z"Fatal read error on pipe transportz*Read error on pipe transport while closingTr   )r+   r/   ru   resultr   bytes
memoryviewr   r_   r   r   	_proactor	recv_intor'   add_done_callbackr   ConnectionAbortedErrorrq   r   r   rm   ConnectionResetErrorro   rl   r   CancelledError)r8   futr   r   rp   s        r   r   (_ProactorReadPipeTransport._loop_reading  s   .	2~~,1G15@ @!%88:: ZZ\F{F {##D1 A !DJJ!7!@AD JJL}}2 {##D1 ) <<!%!5!5!?!?

DJJ!W <<001C1CD{##D1 # & 	,==!!#'KLL%%''I&*,# 	#c"" 	Ic#GHH(( 	== !	 {##D1 sz   A$F  AF  !AF  16I!  
I
#G+-I! 24G+&I! +I8H	I! IH2-I! 2)II! II! !I;)r   r   r   r+   )NNNi   rS   )rE   r   r   r   r   r%   r   r   r   r   r   r   r   r   r   s   @r   r   r      s4    #486;64&5$ /212 12r@   r   c                   ^   ^  \ rS rSrSrSrU 4S jrS rSS jrS r	S r
S	 rS
 rS rSrU =r$ )_ProactorBaseWritePipeTransportiH  zTransport for write pipes.Tc                 4   > [         TU ]  " U0 UD6  S U l        g rS   )r$   r%   rt   r8   argskwr>   s      r   r%   (_ProactorBaseWritePipeTransport.__init__N  s    $%"%!r@   c                    [        U[        [        [        45      (       d!  [	        S[        U5      R                   35      eU R                  (       a  [        S5      eU R                  b  [        S5      eU(       d  g U R                  (       aJ  U R                  [        R                  :  a  [        R                  " S5        U =R                  S-  sl
        g U R                  c(  U R                   b   eU R#                  [        U5      S9  g U R                   (       d!  [        U5      U l        U R%                  5         g U R                   R'                  U5        U R%                  5         g )Nz/data argument must be a bytes-like object, not zwrite_eof() already calledz(unable to write; sendfile is in progresszsocket.send() raised exception.r   )r   )rk   r   r   r   	TypeErrortyperE   r1   RuntimeErrorrt   r.   r   !LOG_THRESHOLD_FOR_CONNLOST_WRITESr   r   r,   r*   _loop_writing_maybe_pause_protocolextend)r8   r   s     r   write%_ProactorBaseWritePipeTransport.writeR  s   $	: >??Dz**+-. . ;<<)IJJ??)"M"MM@AOOq O ??"<<'''E$K0$T?DL&&( LL%&&(r@   c                     Ub  U R                   c  U R                  (       a  g XR                   L d   eS U l         SU l        U(       a  UR                  5         Uc  U R                  nS U l        U(       d  U R                  (       a&  U R
                  R                  U R                  S 5        U R                  (       a)  U R                  R                  [        R                  5        U R                  5         OU R
                  R                  R                  U R                  U5      U l         U R                   R!                  5       (       dX  U R                  S:X  d   e[#        U5      U l        U R                   R%                  U R&                  5        U R)                  5         O%U R                   R%                  U R&                  5        U R*                  b*  U R                   c  U R*                  R-                  S 5        g g g ! [.         a  nU R1                  U5         S nAg S nAf[2         a  nU R5                  US5         S nAg S nAff = f)Nr   z#Fatal write error on pipe transport)r,   r/   r-   r   r*   r   r3   r^   r1   r'   rz   r   SHUT_WR_maybe_resume_protocolr   sendru   rH   r   r   r   rt   rv   r   ro   rl   rq   )r8   fr   rp   s       r   r   -_ProactorBaseWritePipeTransport._loop_writingx  s   &	J}!8T]] '''"DO"#D
|||#==JJ(()C)CTJ$$JJ''7 ++-"&**"6"6";";DJJ"M++--..!333*-d)D'OO55d6H6HI..0OO55d6H6HI!!-$//2I""--d3 3J-# 	#c"" 	Jc#HII	Js)   !H GH 
I
H!!I
.II
c                     gNT rW   s    r   can_write_eof-_ProactorBaseWritePipeTransport.can_write_eof      r@   c                 $    U R                  5         g rS   )r`   rW   s    r   	write_eof)_ProactorBaseWritePipeTransport.write_eof  s    

r@   c                 &    U R                  S 5        g rS   ro   rW   s    r   abort%_ProactorBaseWritePipeTransport.abort      $r@   c                     U R                   b  [        S5      eU R                  R                  5       U l         U R                  c  U R                   R                  S 5        U R                   $ )NzEmpty waiter is already set)rt   r   r   create_futurer,   rv   rW   s    r   _make_empty_waiter2_ProactorBaseWritePipeTransport._make_empty_waiter  sY    )<==!ZZ557??"))$/!!!r@   c                     S U l         g rS   )rt   rW   s    r   _reset_empty_waiter3_ProactorBaseWritePipeTransport._reset_empty_waiter  s
    !r@   )r*   rt   r-   r,   NN)rE   r   r   r   r   _start_tls_compatibler%   r   r   r   r   r   r   r   r   r   r   s   @r   r   r   H  s<    $ "$)L'JR "" "r@   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )_ProactorWritePipeTransporti  c                    > [         TU ]  " U0 UD6  U R                  R                  R	                  U R
                  S5      U l        U R                  R                  U R                  5        g )N   )	r$   r%   r   r   recvr'   r+   r   _pipe_closedr   s      r   r%   $_ProactorWritePipeTransport.__init__  sO    $%"%--224::rB(():):;r@   c                 Z   UR                  5       (       a  g UR                  5       S:X  d   eU R                  (       a  U R                  b   eg XR                  L d   XR                  45       eS U l        U R                  b  U R                  [        5       5        g U R                  5         g )Nr@   )	cancelledr   r/   r+   r,   ro   BrokenPipeErrorr`   )r8   r   s     r   r   (_ProactorWritePipeTransport._pipe_closed  s    ==??zz|s"""==>>)))nn$;sNN&;;$??&o/0JJLr@   )r+   )rE   r   r   r   r%   r   r   r   r   s   @r   r   r     s    <
 r@   r   c                   d   ^  \ rS rSrSr  SU 4S jjrS rS rS rSS jr	SS jr
SS	 jrS
rU =r$ )_ProactorDatagramTransporti  i   c                    > X@l         S U l        SU l        [        TU ]  XX5US9  [
        R                  " 5       U l        U R                  R                  U R                  5        g )Nr   )r;   r<   )_addressrt   _buffer_sizer$   r%   collectionsdequer*   r   r3   r   )r8   r9   r   r:   addressr;   r<   r>   s          r   r%   #_ProactorDatagramTransport.__init__  sX    ! 	XEJ #((*

T//0r@   c                     [        X5        g rS   r   rP   s     r   r&   %_ProactorDatagramTransport._set_extra  
    $%r@   c                     U R                   $ rS   )r   rW   s    r   r   0_ProactorDatagramTransport.get_write_buffer_size  s       r@   c                 &    U R                  S 5        g rS   r   rW   s    r   r    _ProactorDatagramTransport.abort  r   r@   c                    [        U[        [        [        45      (       d  [	        S[        U5      5      eU R                  b*  US U R                  4;  a  [        SU R                   35      eU R                  (       a[  U R                  (       aJ  U R                  [        R                  :  a  [        R                  " S5        U =R                  S-  sl        g U R                  R                  [        U5      U45        U =R                  [!        U5      S-   -  sl        U R"                  c  U R%                  5         U R'                  5         g )Nz,data argument must be bytes-like object (%r)z!Invalid address: must be None or z!socket.sendto() raised exception.r      )rk   r   r   r   r   r   r   
ValueErrorr.   r   r   r   r   r*   rF   r   rH   r,   r   r   )r8   r   addrs      r   sendto!_ProactorDatagramTransport.sendto  s    $	: >??J J( ( ==$dDMM5J)J3DMM?CE E ??t}})"M"MMBCOOq O 	U4[$/0SY]*??"  	""$r@   c                     U R                   (       a  g XR                  L d   eS U l        U(       a  UR                  5         U R                  (       a"  U R                   (       aI  U R                  (       a8  U R
                  (       a&  U R                  R                  U R                  S 5        g U R                  R                  5       u  p#U =R                  [        U5      -  sl
        U R                  b6  U R                  R                  R                  U R                  U5      U l        O4U R                  R                  R                  U R                  UUS9U l        U R                  R!                  U R"                  5        U R%                  5         g ! [&         a%  nU R(                  R+                  U5         S nAg S nAf[,         a  nU R/                  US5         S nAg S nAff = f)N)r  z'Fatal write error on datagram transport)r.   r,   r   r*   r   r/   r   r3   r^   popleftr   rH   r   r   r'   r  r   r   r   rl   r4   error_received	Exceptionrq   )r8   r   r   r  rp   s        r   r   (_ProactorDatagramTransport._loop_writing  s`   	*//)))"DO

<<DOO==JJ(()C)CTJ--/JDT*}}("&**"6"6";";DJJ<@#B #'**"6"6"="=djj>BCG #> #I OO--d.@.@A'')  	/NN))#.. 	Nc#LMM	Ns0   F BF -B1F 
G'F>>G'G""G'c                    S n U R                   (       a&   U(       a  U R                  R                  UW5        g g U R                  UL d   U R                  c  U R                  (       d   eS U l        Ubg  UR                  5       nU R                  (       a(  S n U(       a  U R                  R                  UW5        g g U R                  b  X@R                  p2OUu  p#U R                   (       a&   U(       a  U R                  R                  UW5        g g U R                  b@  U R                  R                  R                  U R                  U R                  5      U l        O?U R                  R                  R                  U R                  U R                  5      U l        U R                  b%  U R                  R                  U R                  5        U(       a  U R                  R                  UW5        g g ! [         a%  nU R                  R!                  U5         S nANOS nAf["        R$                   a    U R                  (       d  e  Nzf = f! U(       a  U R                  R                  UW5        f f = frS   )r.   r4   datagram_receivedr+   r/   r   r   r   r   r   r'   max_sizerecvfromr   r   rl   r  r   r   )r8   r   r   r  resrp   s         r   r   (_ProactorDatagramTransport._loop_reading!  s   '	=H 00t< E >>S(T^^-C-1]]< < "DNjjl==D0 00t< - ==,!$mm$!$JD  00t<  }}(!%!5!5!:!:4::;?=="J "&!5!5!>!>tzz?C}}"N ~~)001C1CD00t<   	/NN))#..(( 	== !	 00t< sN   G5 AG5 =/G5 BG5 2I 5
I?HI )II 
II &I4)r   r*   r   rt   r+   r,   r   rS   )rE   r   r   r   r  r%   r&   r   r   r  r   r   r   r   r   s   @r   r   r     s7    H59$(1&! %4 *D)= )=r@   r   c                   $    \ rS rSrSrS rS rSrg)_ProactorDuplexPipeTransportiM  zTransport for duplex pipes.c                     g)NFr   rW   s    r   r   *_ProactorDuplexPipeTransport.can_write_eofR  s    r@   c                     [         erS   )NotImplementedErrorrW   s    r   r   &_ProactorDuplexPipeTransport.write_eofU  s    !!r@   r   N)rE   r   r   r   r   r   r   r   r   r@   r   r  r  M  s     &"r@   r  c                   r   ^  \ rS rSrSr\R                  R                  r  SU 4S jjr	S r
S rS rSrU =r$ )	_ProactorSocketTransportiY  z Transport for connected sockets.c                 T   > [         TU ]  XX4XV5        [        R                  " U5        g rS   )r$   r%   r   _set_nodelayr7   s          r   r%   !_ProactorSocketTransport.__init__`  s"    XuE  &r@   c                     [        X5        g rS   r  rP   s     r   r&   #_ProactorSocketTransport._set_extrae  r  r@   c                     gr   r   rW   s    r   r   &_ProactorSocketTransport.can_write_eofh  r   r@   c                     U R                   (       d  U R                  (       a  g SU l        U R                  c*  U R                  R	                  [
        R                  5        g g r   )r/   r1   r,   r'   rz   r   r   rW   s    r   r   "_ProactorSocketTransport.write_eofk  sA    ==D-- ??"JJ/ #r@   )r1   r   )rE   r   r   r   r   r   _SendfileMode
TRY_NATIVE_sendfile_compatibler%   r&   r   r   r   r   r   s   @r   r"  r"  Y  s9     +$22==48$('
&0 0r@   r"  c                     ^  \ rS rSrU 4S jr  S S jr S!SSSSSSS.S jjr S S jr  S"S	 jr  S"S
 jr	  S"S jr
U 4S jrS rS rS rS#S jrS rS rS rS rS rS rS rS rS!S jrS r   S$S jrS rS rS rSrU =r$ )%r   is  c                   > [         TU ]  5         [        R                  " SUR                  R
                  5        Xl        Xl        S U l        0 U l	        UR                  U 5        U R                  5         [        R                  " 5       [        R                  " 5       L a/  [        R                   " U R"                  R%                  5       5        g g )NzUsing proactor: %s)r$   r%   r   rm   r>   rE   r   	_selector_self_reading_future_accept_futuresset_loop_make_self_pipe	threadingcurrent_threadmain_threadsignalset_wakeup_fd_csockrG   )r8   proactorr>   s     r   r%   BaseProactorEventLoop.__init__u  s    )8+=+=+F+FG!!$(!!$##%)>)>)@@  !3!3!56 Ar@   Nc                     [        XX#XE5      $ rS   )r"  )r8   r   r:   r;   r<   r=   s         r   _make_socket_transport,BaseProactorEventLoop._make_socket_transport  s    'H(-7 	7r@   F)server_sideserver_hostnamer<   r=   ssl_handshake_timeoutssl_shutdown_timeoutc                `    [         R                  " XX4XVU	U
S9n[        XUXxS9  UR                  $ )N)rC  rD  r<   r=   )r
   SSLProtocolr"  _app_transport)r8   rawsockr:   
sslcontextr;   rA  rB  r<   r=   rC  rD  ssl_protocols               r   _make_ssl_transport)BaseProactorEventLoop._make_ssl_transport  s?      ++
&;%9	;
 	!',	=***r@   c                     [        XX#XE5      $ rS   )r   )r8   r   r:   r   r;   r<   s         r   _make_datagram_transport.BaseProactorEventLoop._make_datagram_transport  s    )$h*09 	9r@   c                     [        U XX45      $ rS   )r  r8   r   r:   r;   r<   s        r   _make_duplex_pipe_transport1BaseProactorEventLoop._make_duplex_pipe_transport  s    +D,0FK 	Kr@   c                     [        XX#U5      $ rS   )r   rR  s        r   _make_read_pipe_transport/BaseProactorEventLoop._make_read_pipe_transport  s    )$hNNr@   c                     [        U XX45      $ rS   )r   rR  s        r   _make_write_pipe_transport0BaseProactorEventLoop._make_write_pipe_transport  s     +4+/6J 	Jr@   c                   > U R                  5       (       a  [        S5      eU R                  5       (       a  g [        R                  " 5       [        R
                  " 5       L a  [        R                  " S5        U R                  5         U R                  5         U R                  R                  5         S U l
        S U l        [        TU ]-  5         g )Nz!Cannot close a running event loopr{   )
is_runningr   	is_closedr6  r7  r8  r9  r:  _stop_accept_futures_close_self_piper   r`   r1  r$   )r8   r>   s    r   r`   BaseProactorEventLoop.close  s    ??BCC>>##%)>)>)@@  $ 	!!# 	r@   c                 T   #    U R                   R                  X5      I S h  vN $  N7frS   )r   r   )r8   r   ns      r   	sock_recvBaseProactorEventLoop.sock_recv  s      ^^((1111   (&(c                 T   #    U R                   R                  X5      I S h  vN $  N7frS   )r   r   )r8   r   bufs      r   sock_recv_into$BaseProactorEventLoop.sock_recv_into  s      ^^--d8888re  c                 T   #    U R                   R                  X5      I S h  vN $  N7frS   )r   r  )r8   r   bufsizes      r   sock_recvfrom#BaseProactorEventLoop.sock_recvfrom  s      ^^,,T;;;;re  c                 z   #    U(       d  [        U5      nU R                  R                  XU5      I S h  vN $  N7frS   )rH   r   recvfrom_into)r8   r   rg  nbytess       r   sock_recvfrom_into(BaseProactorEventLoop.sock_recvfrom_into  s.     XF^^11$VDDDDs   2;9;c                 T   #    U R                   R                  X5      I S h  vN $  N7frS   )r   r   )r8   r   r   s      r   sock_sendall"BaseProactorEventLoop.sock_sendall  s      ^^((4444re  c                 X   #    U R                   R                  XSU5      I S h  vN $  N7f)Nr   )r   r  )r8   r   r   r   s       r   sock_sendto!BaseProactorEventLoop.sock_sendto  s$     ^^**4q'BBBBs   !*(*c                    #    U R                   (       a  UR                  5       S:w  a  [        S5      eU R                  R	                  X5      I S h  vN $  N7f)Nr   zthe socket must be non-blocking)_debug
gettimeoutr  r   connect)r8   r   r   s      r   sock_connect"BaseProactorEventLoop.sock_connect  sA     ;;4??,1>??^^++D::::s   AAAAc                 T   #    U R                   R                  U5      I S h  vN $  N7frS   )r   acceptrP   s     r   sock_accept!BaseProactorEventLoop.sock_accept  s      ^^**40000re  c                   #     UR                  5       n [        R                  " U5      R                  nU(       a  UOUnU(       d  g[        US5      nU(       a  [        X4-   U5      OUn	[        X75      nSn
  [        X-
  U5      nUS::  a  U
U
S:  a  UR                  U5        $ $ U R                  R                  XX85      I S h  vN   X8-  nX-  n
M\  ! [        [        R                  4 a  n[        R
                  " S5      eS nAff = f! [         a    [        R
                  " S5      ef = f Nj! U
S:  a  UR                  U5        f f = f7f)Nznot a regular filer   l    )rG   AttributeErrorioUnsupportedOperationr   SendfileNotAvailableErrorosfstatst_sizerl   minseekr   sendfile)r8   r   fileoffsetcountrG   errfsize	blocksizeend_pos
total_sents              r   _sock_sendfile_native+BaseProactorEventLoop._sock_sendfile_native  sP    	M[[]F	MHHV$,,E #E		;/	05#fne,5V#

	" 0)<	>%
 A~		&! 	 nn--d&LLL#'
   7 78 	M667KLL	M  	M667KLL	M M A~		&! si   EC  D AE9D4 E(D4 D2D4 D0DDE!D//E2D4 4EEc                 v  #    UR                  5       nUR                  5         UR                  5       I S h  vN    U R                  UR                  X#USS9I S h  vN UR                  5         U(       a  UR                  5         $ $  NQ N.! UR                  5         U(       a  UR                  5         f f = f7f)NF)fallback)r   r   r   sock_sendfiler'   r   r   )r8   transpr  r  r  r   s         r   _sendfile_native&BaseProactorEventLoop._sendfile_native  s     **,'')))	(++FLL$5: , < < &&(%%'  	*< &&(%%' s8   4B9BB9B B
B *B9
B *B66B9c                    U R                   b!  U R                   R                  5         S U l         U R                  R                  5         S U l        U R                  R                  5         S U l        U =R
                  S-  sl        g )Nr   )r2  r_   _ssockr`   r;  _internal_fdsrW   s    r   r_  &BaseProactorEventLoop._close_self_pipe  sg    $$0%%,,.(,D%ar@   c                     [         R                  " 5       u  U l        U l        U R                  R	                  S5        U R                  R	                  S5        U =R
                  S-  sl        g )NFr   )r   
socketpairr  r;  setblockingr  rW   s    r   r5  %BaseProactorEventLoop._make_self_pipe  sN    #)#4#4#6 T[&&ar@   c                 |    Ub  UR                  5         U R                  ULa  g U R                  R                  U R                  S5      nXl        UR                  U R                  5        g ! [        R                   a     g [        [        4 a    e [         a  nU R                  SUU S.5         S nAg S nAff = f)Ni   z.Error on reading from the event loop self pipe)ri   rj   r9   )r   r2  r   r   r  r   _loop_self_readingr   r   r   r   r   rn   )r8   r   rp   s      r   r  (BaseProactorEventLoop._loop_self_reading  s    	9}
((1 ##DKK6A )*% 7 78 (( 	-. 	 	''K )  	s"   "A- &A- -B;B;B66B;c                     U R                   nUc  g  UR                  S5        g ! [         a+    U R                  (       a  [        R
                  " SSS9   g  g f = f)N    z3Fail to write a null byte into the self-pipe socketTr   )r;  r   rl   rz  r   rm   )r8   csocks     r   _write_to_self$BaseProactorEventLoop._write_to_self1  sU     =	,JJu 	,{{ 0&*, 	,s   $ 0AAc           	      T   ^ ^^^^^^^ SUUU UUUUU4S jjmT R                  T5        g )Nc                    >  U bp  U R                  5       u  pTR                  (       a  [        R                  " STX!5        T" 5       nTb  TR	                  XTSSU0TT
TS9  OTR                  XSU0TS9  TR                  5       (       a  g TR                  R                  T	5      n U TR                  T	R                  5       '   U R                  T5        g ! [         a  nT	R                  5       S:w  a>  TR                  SU[        R                  " T	5      S.5        T	R!                  5          S nAg TR                  (       a  [        R                  " S	T	SS
9   S nAg  S nAg S nAf["        R$                   a    T	R!                  5          g f = f)Nz#%r got a new connection from %r: %rTr   )rA  r<   r=   rC  rD  rF  r{   zAccept failed on a socket)ri   rj   r   zAccept failed on socket %rr   )r   rz  r   rm   rL  r?  r]  r   r  r3  rG   r   rl   rn   r   r   r`   r   r   )r   connr  r:   rp   r9   protocol_factoryr8   r=   r   rC  rD  rJ  s        r   r9   2BaseProactorEventLoop._start_serving.<locals>.loopH  sj   #*=!"JD{{%J%+T9/1H!-00 JD#-t"4V2G1E	 1 G 33 #-t"4V 4 E >>##NN))$/ 78$$T[[]3##D)  
6;;=B&//#>%("("8"8">1 
 JJLL[[LL!=!%6 ! ,, 

s+   BC C 
F AE#2'E##'FFrS   )r3   )	r8   r  r   rJ  r=   backlogrC  rD  r9   s	   ````` ``@r   _start_serving$BaseProactorEventLoop._start_servingC  s    
$	* $	*L 	tr@   c                     g rS   r   )r8   
event_lists     r   _process_events%BaseProactorEventLoop._process_eventsp  s    r@   c                     U R                   R                  5        H  nUR                  5         M     U R                   R                  5         g rS   )r3  valuesr_   clear)r8   futures     r   r^  *BaseProactorEventLoop._stop_accept_futurest  s6    **113FMMO 4""$r@   c                     U R                   R                  UR                  5       S 5      nU(       a  UR                  5         U R                  R                  U5        UR                  5         g rS   )r3  poprG   r_   r   _stop_servingr`   )r8   r   r  s      r   r  #BaseProactorEventLoop._stop_servingy  sG    %%))$++->MMO$$T*

r@   )r3  r;  r   r1  r2  r  r   rS   r   )r   )NNd   NN) rE   r   r   r   r%   r?  rL  rO  rS  rV  rY  r`   rc  rh  rl  rq  rt  rw  r}  r  r  r  r_  r5  r  r  r  r  r^  r  r   r   r   s   @r   r   r   s  s    7 =A267 9=+ $t"&!%+  CG9
 BF*.K
 @D(,O AE)-J(29<E5C;
1":
(  98,& >A-1,0+Z%
 r@   r   )$r   __all__r  r  r   r   r9  r6  r    r   r   r   r   r	   r
   r   r   logr   r   _FlowControlMixinBaseTransportr!   ReadTransportr   WriteTransportr   r   DatagramTransportr   	Transportr  r"  BaseEventLoopr   r   r@   r   <module>r     s   # 	 	              0$D!=!=!+!9!9DNP2!;!+!9!9P2fk"&@&0&?&?k"\"A ,~=!;!+!=!=~=B	"#=#B#-#7#7	"09>)3304KK55 Kr@   