
    h                        d Z dZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddl	mZ ddl	mZ ddl	mZ dd	l	mZ dd
l	mZ ddl	mZ ddl	mZ ddlmZ d Z G d dej        ej                  Z G d deej                  Z G d deej                  Z G d de          Z G d deej                  Z G d deeej                  Z  G d deeej                  Z! G d de
j"                  Z#dS )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                    t          j        |          | j        d<   	 |                                | j        d<   nE# t          j        $ r3 | j                                        rt          j	        d|d           Y nw xY wd| j        vr?	 |
                                | j        d<   d S # t          j        $ r d | j        d<   Y d S w xY wd S )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.11/asyncio/proactor_events.py_set_socket_extrar      s	   !'!7!=!=IXC'+'7'7'9'9	$$< C C C?$$&& 	CN,dTC C C CC
 )))	0+/+;+;+=+=IZ(((| 	0 	0 	0+/IZ((((	0 *)s!   ; ?A=<A=
B( (CCc                   z     e Zd ZdZ	 	 d fd	Zd Zd Zd Zd Zd Z	d	 Z
ej        fd
ZddZd Zd Zd Z xZS )_ProactorBasePipeTransportz*Base class for pipe and socket transports.Nc                 
   t                                          ||           |                     |           || _        |                     |           || _        d | _        d | _        d | _        d| _	        d| _
        d| _        d| _        d| _        | j        | j                                         | j                            | j        j        |            |(| j                            t&          j        |d            d S d S )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$   z#_ProactorBasePipeTransport.__init__2   s   %%%
(###',$!<#L  """
T^;TBBBJ  !E!'/ / / / /     c                 t   | j         j        g}| j        |                    d           n| j        r|                    d           | j        /|                    d| j                                                    | j        |                    d| j                   | j        |                    d| j                   | j        r*|                    dt          | j                              | j
        r|                    d           d                    d	                    |                    S )
Nclosedclosingzfd=zread=zwrite=zwrite_bufsize=zEOF writtenz<{}> )r=   __name__r&   appendr.   filenor*   r+   r)   lenr0   formatjoin)r7   infos     r   __repr__z#_ProactorBasePipeTransport.__repr__I   s+   '(:KK!!!!] 	#KK	""":!KK3dj//1133444>%KK222333?&KK444555< 	>KK<T\):):<<=== 	'KK&&&}}SXXd^^,,,r>   c                     || j         d<   d S )Npipe)r   r7   r   s     r   r%   z%_ProactorBasePipeTransport._set_extra[   s    "Fr>   c                     || _         d S Nr3   )r7   r9   s     r   r'   z'_ProactorBasePipeTransport.set_protocol^   s    !r>   c                     | j         S rO   rP   r7   s    r   get_protocolz'_ProactorBasePipeTransport.get_protocola   s
    ~r>   c                     | j         S rO   )r.   rR   s    r   
is_closingz%_ProactorBasePipeTransport.is_closingd   s
    }r>   c                     | j         rd S d| _         | xj        dz  c_        | j        s'| j         | j                            | j        d            | j        "| j                                         d | _        d S d S )NTr   )	r.   r-   r)   r+   r   r2   _call_connection_lostr*   cancelrR   s    r   closez _ProactorBasePipeTransport.closeg   s    = 	F1| 	C 7J  !;TBBB>%N!!###!DNNN &%r>   c                 v    | j         1 |d| t          |            | j                                          d S d S )Nzunclosed transport )source)r&   ResourceWarningrY   )r7   _warns     r   __del__z"_ProactorBasePipeTransport.__del__r   sL    :!E000/$OOOOJ "!r>   Fatal error on pipe transportc                 <   	 t          |t                    r2| j                                        rt	          j        d| |d           n$| j                            ||| | j        d           |                     |           d S # |                     |           w xY w)Nz%r: %sTr   )message	exceptionr   r9   )	
isinstanceOSErrorr   r   r   debugcall_exception_handlerr3   _force_close)r7   excra   s      r   _fatal_errorz'_ProactorBasePipeTransport._fatal_errorw   s    	##w'' 	:'')) IL44HHHH
11&!$!% $	3 3    c"""""Dc""""s   A+B Bc                    | j         P| j                                         s7|| j                             d            n| j                             |           | j        r	| j        rd S d| _        | xj        dz  c_        | j        r | j                                         d | _        | j	        r | j	                                         d | _	        d| _
        d | _        | j                            | j        |           d S )NTr   r   )_empty_waiterdone
set_resultset_exceptionr.   r/   r-   r+   rX   r*   r,   r)   r   r2   rW   )r7   rh   s     r   rg   z'_ProactorBasePipeTransport._force_close   s    )$2D2I2I2K2K){"--d3333"00555= 	T9 	F1? 	#O""$$$"DO> 	"N!!###!DN
T7=====r>   c                    | j         rd S 	 | j                            |           t          | j        d          rA| j                                        dk    r$| j                            t          j                   | j        	                                 d | _        | j
        }||                                 d | _
        d| _         d S # t          | j        d          rA| j                                        dk    r$| j                            t          j                   | j        	                                 d | _        | j
        }||                                 d | _
        d| _         w xY w)NshutdownT)r/   r3   connection_losthasattrr&   rE   rp   r   	SHUT_RDWRrY   r(   _detach)r7   rh   r<   s      r   rW   z0_ProactorBasePipeTransport._call_connection_lost   s\   ' 	F	0N**3/// tz:.. 64:3D3D3F3F"3L3L
##F$4555JDJ\F!   #+/D((( tz:.. 64:3D3D3F3F"3L3L
##F$4555JDJ\F!   #+/D(////s   C B#E+c                 P    | j         }| j        |t          | j                  z  }|S rO   )r,   r)   rF   )r7   sizes     r   get_write_buffer_sizez0_ProactorBasePipeTransport.get_write_buffer_size   s+    "<#C%%%Dr>   NNN)r_   )rC   
__module____qualname____doc__r$   rJ   r%   r'   rS   rU   rY   warningswarnr^   ri   rg   rW   rx   __classcell__r=   s   @r   r!   r!   .   s        4448$(/ / / / / /.- - -$# # #" " "    	" 	" 	" %M    
# # # #> > >(0 0 0(      r>   r!   c                   N     e Zd ZdZ	 	 d fd	Zd Zd Zd Zd Zd	 Z	dd
Z
 xZS )_ProactorReadPipeTransportzTransport for read pipes.N   c                     d| _         d| _        t                                          ||||||           t	          |          | _        | j                            | j                   d| _        d S )Nrq   TF)	_pending_data_length_pausedr#   r$   	bytearray_datar   r2   _loop_reading)	r7   r8   r   r9   r:   r;   r<   buffer_sizer=   s	           r   r$   z#_ProactorReadPipeTransport.__init__   sg    $&!tXvufEEE{++

T/000r>   c                 "    | j          o| j         S rO   )r   r.   rR   s    r   
is_readingz%_ProactorReadPipeTransport.is_reading   s    <5$55r>   c                     | j         s| j        rd S d| _        | j                                        rt	          j        d|            d S d S )NTz%r pauses reading)r.   r   r   r   r   re   rR   s    r   pause_readingz(_ProactorReadPipeTransport.pause_reading   s\    = 	DL 	F :!! 	4L,d33333	4 	4r>   c                 f   | j         s| j        sd S d| _        | j         | j                            | j        d            | j        }d| _        |dk    r.| j                            | j        | j        d |         |           | j        	                                rt          j        d|            d S d S )NFrq   z%r resumes reading)r.   r   r*   r   r2   r   r   _data_receivedr   r   r   re   )r7   lengths     r   resume_readingz)_ProactorReadPipeTransport.resume_reading   s    = 	 	F>!J  !3T:::*$&!B;; J  !4dj&6I6RRR:!! 	5L-t44444	5 	5r>   c                 F   | j                                         rt          j        d|            	 | j                                        }n?# t          t          f$ r  t          $ r!}| 	                    |d           Y d }~d S d }~ww xY w|s| 
                                 d S d S )Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.)r   r   r   re   r3   eof_received
SystemExitKeyboardInterruptBaseExceptionri   rY   )r7   	keep_openrh   s      r   _eof_receivedz(_ProactorReadPipeTransport._eof_received   s    :!! 	2L*D111	3355II-. 	 	 	 	 	 	HJ J JFFFFF	
  	JJLLLLL	 	s   A
 
B%BBc                    | j         r| j        dk    sJ || _        d S |dk    r|                                  d S t          | j        t
          j                  r\	 t          j        | j        |           d S # t          t          f$ r  t          $ r!}|                     |d           Y d }~d S d }~ww xY w| j                            |           d S )Nrq   r   z3Fatal error: protocol.buffer_updated() call failed.)r   r   r   rc   r3   r	   BufferedProtocol_feed_data_to_buffered_protor   r   r   ri   data_received)r7   datar   rh   s       r   r   z)_ProactorReadPipeTransport._data_received   s   < 	 ,2222(.D%FQ;;   Fdni&@AA 	/6t~tLLLLL 12       !!##12 2 2 	 N((.....s   A6 6B2B--B2c                 Z   d}d }	 || j         |u s| j         | j        sJ d | _         |                                rK|                                }|dk    r!	 |dk    r|                     ||           d S d S | j        d |         }n|                                 | j        r!	 |dk    r|                     ||           d S d S | j        s/| j        j	        
                    | j        | j                  | _         | j        s| j                             | j                   n# t          $ rW}| j        s|                     |d           n/| j                                        rt#          j        dd           Y d }~nod }~wt&          $ r}|                     |           Y d }~nHd }~wt*          $ r }|                     |d           Y d }~n d }~wt,          j        $ r | j        s Y nw xY w|dk    r|                     ||           d S d S # |dk    r|                     ||           w w xY w)Nrq   r   z"Fatal read error on pipe transportz*Read error on pipe transport while closingTr   )r*   r.   rl   resultr   r   rX   r   r   	_proactor	recv_intor&   add_done_callbackr   ConnectionAbortedErrorri   r   r   re   ConnectionResetErrorrg   rd   r   CancelledError)r7   futr   r   rh   s        r   r   z(_ProactorReadPipeTransport._loop_reading  s   -	2~,,1G15 2H1G1G!%88:: 
! ZZ\\F{{D {{##D&11111 {A  :gvg.DD JJLLL} 2 {{##D&11111 {) < X!%!5!?!?
DJ!W!W < E001CDDD & 	, 	, 	,= ,!!#'KLLLL%%'' ,I&*, , , ,# 	# 	# 	#c"""""""" 	I 	I 	Ic#GHHHHHHHH( 	 	 	=  	 {{##D&11111 {v{{##D&1111 sm   AD  7+D  6D  9'H  
G(*AE<7H <G(	F#H #G(0GH G(%H 'G((H H*)NNNr   rO   )rC   rz   r{   r|   r$   r   r   r   r   r   r   r   r   s   @r   r   r      s        ##486;     6 6 64 4 4&5 5 5$   / / /202 02 02 02 02 02 02 02r>   r   c                   R     e Zd ZdZdZ fdZd ZddZd Zd Z	d	 Z
d
 Zd Z xZS )_ProactorBaseWritePipeTransportzTransport for write pipes.Tc                 H     t                      j        |i | d | _        d S rO   )r#   r$   rk   r7   argskwr=   s      r   r$   z(_ProactorBaseWritePipeTransport.__init__M  s-    $%"%%%!r>   c                    t          |t          t          t          f          s$t	          dt          |          j                   | j        rt          d          | j	        t          d          |sd S | j
        r;| j
        t          j        k    rt          j        d           | xj
        dz  c_
        d S | j        .| j        J |                     t          |                     d S | j        s*t          |          | _        |                                  d S | j                            |           |                                  d S )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   )rc   bytesr   
memoryview	TypeErrortyperC   r0   RuntimeErrorrk   r-   r   !LOG_THRESHOLD_FOR_CONNLOST_WRITESr   r   r+   r)   _loop_writing_maybe_pause_protocolextend)r7   r   s     r   writez%_ProactorBaseWritePipeTransport.writeQ  sc   $	: >?? 	.-Dzz*- -. . .  	=;<<<)IJJJ 	F? 	)"MMM@AAAOOq OOF ?"<'''E$KK00000 	)$T??DL&&((((( L%%%&&(((((r>   Nc                    	 || j         	| j        rd S || j         u sJ d | _         d| _        |r|                                 || j        }d | _        |sg| j        r | j                            | j        d            | j        r$| j	        
                    t          j                   |                                  n| j        j                            | j	        |          | _         | j                                         sU| j        dk    sJ t#          |          | _        | j                             | j                   |                                  n| j                             | j                   | j        #| j         | j                            d            d S d S d S # t.          $ r }|                     |           Y d }~d S d }~wt2          $ r!}|                     |d           Y d }~d S d }~ww xY w)Nr   z#Fatal write error on pipe transport)r+   r.   r,   r   r)   r   r2   rW   r0   r&   rp   r   SHUT_WR_maybe_resume_protocolr   sendrl   rF   r   r   r   rk   rm   r   rg   rd   ri   )r7   fr   rh   s       r   r   z-_ProactorBaseWritePipeTransport._loop_writingw  s6   &	J}!8T]!8 ''''"DO"#D 


||# J= KJ(()CTJJJ$ 8J''777 ++----"&*"6";";DJ"M"M++-- J.!3333*-d))D'O55d6HIII..0000O55d6HIII!-$/2I"--d33333 .-2I2I# 	# 	# 	#c""""""""" 	J 	J 	Jc#HIIIIIIIII	Js)   F! FF! !
G4+GG4G//G4c                     dS NT rR   s    r   can_write_eofz-_ProactorBaseWritePipeTransport.can_write_eof      tr>   c                 .    |                                   d S rO   )rY   rR   s    r   	write_eofz)_ProactorBaseWritePipeTransport.write_eof  s    

r>   c                 0    |                      d            d S rO   rg   rR   s    r   abortz%_ProactorBaseWritePipeTransport.abort      $r>   c                     | j         t          d          | j                                        | _         | j        | j                             d            | j         S )NzEmpty waiter is already set)rk   r   r   create_futurer+   rm   rR   s    r   _make_empty_waiterz2_ProactorBaseWritePipeTransport._make_empty_waiter  sX    )<===!Z5577?"))$///!!r>   c                     d | _         d S rO   )rk   rR   s    r   _reset_empty_waiterz3_ProactorBaseWritePipeTransport._reset_empty_waiter  s    !r>   NN)rC   rz   r{   r|   _start_tls_compatibler$   r   r   r   r   r   r   r   r   r   s   @r   r   r   G  s        $$ " " " " "$) $) $)L'J 'J 'J 'JR         " " "" " " " " " "r>   r   c                   $     e Zd Z fdZd Z xZS )_ProactorWritePipeTransportc                      t                      j        |i | | j        j                            | j        d          | _        | j                            | j                   d S )N   )	r#   r$   r   r   recvr&   r*   r   _pipe_closedr   s      r   r$   z$_ProactorWritePipeTransport.__init__  s\    $%"%%%-224:rBB(():;;;;;r>   c                 H   |                                 rd S |                                dk    sJ | j        r| j        J d S || j        u sJ || j        f            d | _        | j        #|                     t                                 d S |                                  d S )Nr>   )	cancelledr   r.   r*   r+   rg   BrokenPipeErrorrY   )r7   r   s     r   r   z(_ProactorWritePipeTransport._pipe_closed  s    ==?? 	Fzz||s""""= 	>)))Fdn$$$sDN&;$$$?&o//00000JJLLLLLr>   )rC   rz   r{   r$   r   r   r   s   @r   r   r     sG        < < < < <
      r>   r   c                   R     e Zd ZdZ	 	 d
 fd	Zd Zd Zd ZddZddZ	dd	Z
 xZS )_ProactorDatagramTransporti   Nc                     || _         d | _        d| _        t                                          |||||           t          j                    | _        | j        	                    | j
                   d S )Nr   )r:   r;   )_addressrk   _buffer_sizer#   r$   collectionsdequer)   r   r2   r   )r7   r8   r   r9   addressr:   r;   r=   s          r   r$   z#_ProactorDatagramTransport.__init__  sp    ! 	tXfEJJJ #(**
T/00000r>   c                 &    t          | |           d S rO   r   rM   s     r   r%   z%_ProactorDatagramTransport._set_extra      $%%%%%r>   c                     | j         S rO   )r   rR   s    r   rx   z0_ProactorDatagramTransport.get_write_buffer_size  s      r>   c                 0    |                      d            d S rO   r   rR   s    r   r   z _ProactorDatagramTransport.abort  r   r>   c                 Z   t          |t          t          t          f          st	          dt          |                    |sd S | j        "|d | j        fvrt          d| j                   | j        rB| j        r;| j        t          j
        k    rt          j        d           | xj        dz  c_        d S | j                            t          |          |f           | xj        t!          |          z  c_        | j        |                                  |                                  d S )Nz,data argument must be bytes-like object (%r)z!Invalid address: must be None or z!socket.sendto() raised exception.r   )rc   r   r   r   r   r   r   
ValueErrorr-   r   r   r   r   r)   rD   r   rF   r+   r   r   )r7   r   addrs      r   sendtoz!_ProactorDatagramTransport.sendto  s?   $	: >?? 	(J JJ( ( (  	F=$dDM5J)J)JCDMCCE E E ? 	t} 	)"MMMBCCCOOq OOF 	U4[[$/000SYY&?"    	""$$$$$r>   c                 0   	 | j         rd S || j        u sJ d | _        |r|                                 | j        r| j         r0| j        r)| j        r | j                            | j        d            d S | j        	                                \  }}| xj
        t          |          z  c_
        | j        +| j        j                            | j        |          | _        n,| j        j                            | j        ||          | _        | j                            | j                   |                                  d S # t&          $ r%}| j                            |           Y d }~d S d }~wt,          $ r!}|                     |d           Y d }~d S d }~ww xY w)N)r   z'Fatal write error on datagram transport)r-   r+   r   r)   r   r.   r   r2   rW   popleftr   rF   r   r   r&   r   r   r   r   rd   r3   error_received	Exceptionri   )r7   r   r   r   rh   s        r   r   z(_ProactorDatagramTransport._loop_writing  s   	* $/))))"DO 

< DO  = KJ(()CTJJJ--//JD$T*}("&*"6";";DJ<@#B #B #'*"6"="=dj>BCG #> #I #I O--d.@AAA'')))))  	/ 	/ 	/N))#......... 	N 	N 	Nc#LMMMMMMMMM	Ns0   D= A$D= 1BD= =
FE''F4FFc                    d }	 | j         r"	 |r| j                            ||           d S d S | j        |u s| j        | j        sJ d | _        |U|                                }| j        r$d }	 |r| j                            ||           d S d S | j        
|| j        }}n|\  }}| j         r"	 |r| j                            ||           d S d S | j        0| j        j        	                    | j
        | j                  | _        n/| j        j                            | j
        | j                  | _        | j        | j                            | j                   nI# t          $ r$}| j                            |           Y d }~n d }~wt"          j        $ r | j        s Y nw xY w|r| j                            ||           d S d S # |r| j                            ||           w w xY wrO   )r-   r3   datagram_receivedr*   r.   r   r   r   r   r   r&   max_sizerecvfromr   r   rd   r   r   r   )r7   r   r   r   resrh   s         r   r   z(_ProactorDatagramTransport._loop_reading#  s   '	= H  =00t<<<<<= =E >S((T^-C-1] .D-C-C "DNjjll= D0  =00t<<<<<= =- =,!$dm$DD!$JD$    =00t<<<<<= = }(!%!5!:!:4:;?="J "J "&!5!>!>tz?C}"N "N ~)001CDDD  	/ 	/ 	/N))#........( 	 	 	=  	  =00t<<<<<= =t =00t<<<<=sM   E ?E E A&E 3'G 
F $F>G F G F  G  G$ry   rO   )rC   rz   r{   r   r$   r%   rx   r   r   r   r   r   r   s   @r   r   r     s        H59$(1 1 1 1 1 1& & &! ! !     % % % %: *  *  *  *D)= )= )= )= )= )= )= )=r>   r   c                       e Zd ZdZd Zd ZdS )_ProactorDuplexPipeTransportzTransport for duplex pipes.c                     dS )NFr   rR   s    r   r   z*_ProactorDuplexPipeTransport.can_write_eofT  s    ur>   c                     t           rO   )NotImplementedErrorrR   s    r   r   z&_ProactorDuplexPipeTransport.write_eofW  s    !!r>   N)rC   rz   r{   r|   r   r   r   r>   r   r   r   O  s:         &%  " " " " "r>   r   c                   R     e Zd ZdZej        j        Z	 	 d fd	Zd Z	d Z
d Z xZS )_ProactorSocketTransportz Transport for connected sockets.Nc                 |    t                                          ||||||           t          j        |           d S rO   )r#   r$   r   _set_nodelayr6   s          r   r$   z!_ProactorSocketTransport.__init__b  s<    tXvufEEE &&&&&r>   c                 &    t          | |           d S rO   r   rM   s     r   r%   z#_ProactorSocketTransport._set_extrag  r   r>   c                     dS r   r   rR   s    r   r   z&_ProactorSocketTransport.can_write_eofj  r   r>   c                     | j         s| j        rd S d| _        | j        &| j                            t
          j                   d S d S r   )r.   r0   r+   r&   rp   r   r   rR   s    r   r   z"_ProactorSocketTransport.write_eofm  sQ    = 	D- 	F ?"J///// #"r>   ry   )rC   rz   r{   r|   r   _SendfileMode
TRY_NATIVE_sendfile_compatibler$   r%   r   r   r   r   s   @r   r   r   [  s         +*$2=48$(' ' ' ' ' '
& & &  0 0 0 0 0 0 0r>   r   c                        e Zd Z fdZ	 	 d dZ	 d!ddddddddZ	 d dZ	 	 d"dZ	 	 d"d	Z	 	 d"d
Z	 fdZ
d Zd Zd Zd#dZd Zd Zd Zd Zd Zd Zd Zd Zd!dZd Z	 	 	 d$dZd Zd Zd Z xZS )%r   c                    t                                                       t          j        d|j        j                   || _        || _        d | _        i | _	        |
                    |            |                                  t          j                    t          j                    u r-t          j        | j                                                   d S d S )NzUsing proactor: %s)r#   r$   r   re   r=   rC   r   	_selector_self_reading_future_accept_futuresset_loop_make_self_pipe	threadingcurrent_threadmain_threadsignalset_wakeup_fd_csockrE   )r7   proactorr=   s     r   r$   zBaseProactorEventLoop.__init__w  s    )8+=+FGGG!!$(!!$#%%)>)@)@@@ !3!3!5!566666 A@r>   Nc                 *    t          | |||||          S rO   )r   )r7   r   r9   r:   r;   r<   s         r   _make_socket_transportz,BaseProactorEventLoop._make_socket_transport  s!    'dHf(-v7 7 	7r>   F)server_sideserver_hostnamer;   r<   ssl_handshake_timeoutssl_shutdown_timeoutc          
      p    t          j        | ||||||	|
          }t          | ||||           |j        S )N)r  r  r;   r<   )r
   SSLProtocolr   _app_transport)r7   rawsockr9   
sslcontextr:   r  r  r;   r<   r  r  ssl_protocols               r   _make_ssl_transportz)BaseProactorEventLoop._make_ssl_transport  s\      +h
F_&;%9	; ; ;
 	!w',V	= 	= 	= 	=**r>   c                 *    t          | |||||          S rO   )r   )r7   r   r9   r   r:   r;   s         r   _make_datagram_transportz.BaseProactorEventLoop._make_datagram_transport  s!    )$h*0%9 9 	9r>   c                 (    t          | ||||          S rO   )r   r7   r   r9   r:   r;   s        r   _make_duplex_pipe_transportz1BaseProactorEventLoop._make_duplex_pipe_transport  s"    +D,0(FEK K 	Kr>   c                 (    t          | ||||          S rO   )r   r!  s        r   _make_read_pipe_transportz/BaseProactorEventLoop._make_read_pipe_transport  s    )$hNNNr>   c                 (    t          | ||||          S rO   )r   r!  s        r   _make_write_pipe_transportz0BaseProactorEventLoop._make_write_pipe_transport  s$     +4+/65J J 	Jr>   c                    |                                  rt          d          |                                 rd S t          j                    t          j                    u rt          j        d           |                                  | 	                                 | j
                                         d | _
        d | _        t                                                       d S )Nz!Cannot close a running event looprq   )
is_runningr   	is_closedr	  r
  r  r  r  _stop_accept_futures_close_self_piper   rY   r  r#   )r7   r=   s    r   rY   zBaseProactorEventLoop.close  s    ?? 	DBCCC>> 	F#%%)>)@)@@@ $$$ 	!!### 	r>   c                 H   K   | j                             ||           d {V S rO   )r   r   )r7   r   ns      r   	sock_recvzBaseProactorEventLoop.sock_recv  s0      ^((q111111111r>   c                 H   K   | j                             ||           d {V S rO   )r   r   )r7   r   bufs      r   sock_recv_intoz$BaseProactorEventLoop.sock_recv_into  s0      ^--dC888888888r>   c                 H   K   | j                             ||           d {V S rO   )r   r   )r7   r   bufsizes      r   sock_recvfromz#BaseProactorEventLoop.sock_recvfrom  s0      ^,,T7;;;;;;;;;r>   r   c                 l   K   |st          |          }| j                            |||           d {V S rO   )rF   r   recvfrom_into)r7   r   r0  nbytess       r   sock_recvfrom_intoz(BaseProactorEventLoop.sock_recvfrom_into  sE       	XXF^11$VDDDDDDDDDr>   c                 H   K   | j                             ||           d {V S rO   )r   r   )r7   r   r   s      r   sock_sendallz"BaseProactorEventLoop.sock_sendall  s0      ^((t444444444r>   c                 L   K   | j                             ||d|           d {V S )Nr   )r   r   )r7   r   r   r   s       r   sock_sendtoz!BaseProactorEventLoop.sock_sendto  s4      ^**4q'BBBBBBBBBr>   c                 H   K   | j                             ||           d {V S rO   )r   connect)r7   r   r   s      r   sock_connectz"BaseProactorEventLoop.sock_connect  s0      ^++D':::::::::r>   c                 F   K   | j                             |           d {V S rO   )r   acceptrM   s     r   sock_acceptz!BaseProactorEventLoop.sock_accept  s.      ^**4000000000r>   c                   K   	 |                                 }n2# t          t          j        f$ r}t	          j        d          d }~ww xY w	 t          j        |          j        }n"# t          $ r t	          j        d          w xY w|r|n|}|sdS t          |d          }|rt          ||z   |          n|}	t          ||          }d}
	 	 t          |	|z
  |          }|dk    r|
|
dk    r|                    |           S S | j                            ||||           d {V  ||z  }|
|z  }
e# |
dk    r|                    |           w w xY w)Nznot a regular filer   l    )rE   AttributeErrorioUnsupportedOperationr   SendfileNotAvailableErrorosfstatst_sizerd   minseekr   sendfile)r7   r   fileoffsetcountrE   errfsize	blocksizeend_pos
total_sents              r   _sock_sendfile_nativez+BaseProactorEventLoop._sock_sendfile_native  s     	M[[]]FF 78 	M 	M 	M67KLLL	M	MHV$$,EE 	M 	M 	M67KLLL	M"-EE	 	1	;//	05@#fune,,,5VU##

	"(& 0)<<	>>%
 A~~		&!!!! 	 n--dD&)LLLLLLLLL)#i'
( A~~		&!!!! s2    AAAA& &BD2 .D2 2Ec                   K   |                                 }|                                 |                                 d {V  	 |                     |j        |||d           d {V 	 |                                 |r|                                 S S # |                                 |r|                                 w w xY w)NF)fallback)r   r   r   sock_sendfiler&   r   r   )r7   transprN  rO  rP  r   s         r   _sendfile_nativez&BaseProactorEventLoop._sendfile_native  s
     **,,'')))))))))	(++FL$5: , < < < < < < < < < &&((( (%%''''( &&((( (%%''''(s   $B -Cc                     | j          | j                                          d | _         | j                                         d | _        | j                                         d | _        | xj        dz  c_        d S )Nr   )r  rX   _ssockrY   r  _internal_fdsrR   s    r   r+  z&BaseProactorEventLoop._close_self_pipe  sx    $0%,,...(,D%ar>   c                     t          j                    \  | _        | _        | j                            d           | j                            d           | xj        dz  c_        d S )NFr   )r   
socketpairr]  r  setblockingr^  rR   s    r   r  z%BaseProactorEventLoop._make_self_pipe  s_    #)#4#6#6 T[&&&&&&ar>   c                 r   	 ||                                  | j        |urd S | j                            | j        d          }|| _        |                    | j                   d S # t          j        $ r Y d S t          t          f$ r  t          $ r$}|                     d|| d           Y d }~d S d }~ww xY w)Ni   z.Error on reading from the event loop self pipe)ra   rb   r8   )r   r  r   r   r]  r   _loop_self_readingr   r   r   r   r   rf   )r7   r   rh   s      r   rc  z(BaseProactorEventLoop._loop_self_reading  s   	9}


(11 ##DK66A )*D% 788888 ( 	 	 	FF-. 	 	 	 	 	 	''K ) )         	s"   A&  A& &B68B6B11B6c                     | j         }|d S 	 |                    d           d S # t          $ r$ | j        rt	          j        dd           Y d S Y d S w xY w)N    z3Fail to write a null byte into the self-pipe socketTr   )r  r   rd   _debugr   re   )r7   csocks     r   _write_to_selfz$BaseProactorEventLoop._write_to_self1  s     =F	,JJu 	, 	, 	,{ , 0&*, , , , , , ,, , ,	,s   $ 'AAd   c           	      Z     d fd	                                 d S )Nc           
      F   	 | ||                                  \  }}j        rt          j        d||                        }                     ||dd|i
           n                    ||d|i                                           rd S j                            	          } | j	        	
                                <   |                                d S # t          $ r}	
                                dk    r@                    d|t          j        	          d           	                                 n*j        rt          j        d		d
           Y d }~d S Y d }~d S Y d }~d S d }~wt"          j        $ r 	                                 Y d S w xY w)Nz#%r got a new connection from %r: %rTr   )r  r;   r<   r  r  r  rq   zAccept failed on a socket)ra   rb   r   zAccept failed on socket %rr   )r   rf  r   re   r  r  r)  r   rA  r  rE   r   rd   rf   r   r   rY   r   r   )r   connr   r9   rh   r8   protocol_factoryr7   r<   r   r  r  r  s        r   r8   z2BaseProactorEventLoop._start_serving.<locals>.loopH  sD   #*=!"JD${ 9%J%+T49 9 9//11H!-00 (JD#-t"4V2G1E	 1 G G G G 33 (#-t"4V 4 E E E >>## FN))$// 78$T[[]]3##D)))))  
6 
6 
6;;==B&&//#>%("("8">">1 1   
 JJLLLL[ 6L!=!%6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 !LLLLL ,   

s%   BC$ C$ $
F .A6E66&F F rO   )r2   )	r7   rm  r   r  r<   backlogr  r  r8   s	   ````` ``@r   _start_servingz$BaseProactorEventLoop._start_servingC  sf    
$	* $	* $	* $	* $	* $	* $	* $	* $	* $	* $	* $	* $	*L 	tr>   c                     d S rO   r   )r7   
event_lists     r   _process_eventsz%BaseProactorEventLoop._process_eventsp  s    r>   c                     | j                                         D ]}|                                 | j                                          d S rO   )r  valuesrX   clear)r7   futures     r   r*  z*BaseProactorEventLoop._stop_accept_futurest  sJ    *1133 	 	FMMOOOO""$$$$$r>   c                     | j                             |                                d           }|r|                                 | j                            |           |                                 d S rO   )r  poprE   rX   r   _stop_servingrY   )r7   r   rv  s      r   ry  z#BaseProactorEventLoop._stop_servingy  s^    %))$++-->> 	MMOOO$$T***

r>   ry   rO   r   )r   )NNri  NN)rC   rz   r{   r$   r  r  r  r"  r$  r&  rY   r.  r1  r4  r8  r:  r<  r?  rB  rV  r[  r+  r  rc  rh  ro  rr  r*  ry  r   r   s   @r   r   r   u  sS       7 7 7 7 7 =A267 7 7 7 9=+ $t"&!%+ + + + +  CG9 9 9 9
 BF*.K K K K
 @D(,O O O O AE)-J J J J    (2 2 29 9 9< < <E E E E5 5 5C C C; ; ;1 1 1" " ":
( 
( 
(          9 9 9 98, , ,& >A-1,0+ + + +Z  % % %
      r>   r   )$r|   __all__rE  rH  r   r}   r  r	  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 0 0$D D D D D!=!+!9D D DNO2 O2 O2 O2 O2!;!+!9O2 O2 O2dk" k" k" k" k"&@&0&?k" k" k"\    "A   ,A= A= A= A= A=!;!+!=A= A= A=H	" 	" 	" 	" 	"#=#B#-#7	" 	" 	"0 0 0 0 09>)30 0 04I I I I IK5 I I I I Ir>   