
    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	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  \" \R                  S5      r\(       a   \R4                  " S5      rS r " S S\R<                  5      r " S S\R@                  \RB                  5      r" " S S\"5      r# " S S\"\RH                  5      r%g! \ a    Sr Nf = f! \ a    Sr Nrf = f)zEvent loop using a selector and related classes.

A selector is a "notify-when-ready" multiplexer.  For a subclass which
also includes support for signal handling, see the unix_events sub-module.
)BaseSelectorEventLoop    N   )base_events)	constants)events)futures)	protocols)sslproto)
transports)trsock)loggersendmsg
SC_IOV_MAXFc                 v     U R                  U5      n[        UR                  U-  5      $ ! [         a     gf = fNF)get_keyboolr   KeyError)selectorfdeventkeys       ./usr/lib/python3.13/asyncio/selector_events.py_test_selector_eventr   *   sA    (r" CJJ&''  s   + 
88c                   8  ^  \ rS rSrSrS5U 4S jjrS5SSS.S jjr S5SSSS\R                  \R                  S.S	 jjr
 S6S
 jrU 4S jrS rS rS rS rS rSSS\R                  \R                  4S jrSSS\R                  \R                  4S jrSS\R                  \R                  4S jrS rS rS rS rS rS rS rS rS rS rS5S jrS  r S! r!S" r"S# r#S$ r$S7S% jr%S& r&S' r'S( r(S) r)S* r*S+ r+S, r,S5S- jr-S. r.S/ r/S0 r0S1 r1S2 r2S3 r3S4r4U =r5$ )8r   5   zBSelector event loop.

See events.EventLoop for API specification.
Nc                   > [         TU ]  5         Uc  [        R                  " 5       n[        R
                  " SUR                  R                  5        Xl        U R                  5         [        R                  " 5       U l        g )NzUsing selector: %s)super__init__	selectorsDefaultSelectorr   debug	__class____name__	_selector_make_self_pipeweakrefWeakValueDictionary_transports)selfr   r#   s     r   r   BaseSelectorEventLoop.__init__;   s_     002H)8+=+=+F+FG!"668    extraserverc                >    U R                  U5        [        XX#XE5      $ N)_ensure_fd_no_transport_SelectorSocketTransport)r*   sockprotocolwaiterr.   r/   s         r   _make_socket_transport,BaseSelectorEventLoop._make_socket_transportE   s$    $$T*'H(-7 	7r,   F)server_sideserver_hostnamer.   r/   ssl_handshake_timeoutssl_shutdown_timeoutc                    U R                  U5        [        R                  " XX4XVU	U
S9n[        XUXxS9  UR                  $ )N)r;   r<   r-   )r2   r
   SSLProtocolr3   _app_transport)r*   rawsockr5   
sslcontextr6   r9   r:   r.   r/   r;   r<   ssl_protocols               r   _make_ssl_transport)BaseSelectorEventLoop._make_ssl_transportK   sM     	$$W-++J"7!5	
 	!',	=***r,   c                 @    U R                  U5        [        XUX4U5      $ r1   )r2   _SelectorDatagramTransport)r*   r4   r5   addressr6   r.   s         r   _make_datagram_transport.BaseSelectorEventLoop._make_datagram_transport]   s(    $$T*)$h*15B 	Br,   c                   > U R                  5       (       a  [        S5      eU R                  5       (       a  g U R                  5         [        TU ]  5         U R                  b"  U R                  R                  5         S U l        g g )Nz!Cannot close a running event loop)
is_runningRuntimeError	is_closed_close_self_piper   closer%   r*   r#   s    r   rO   BaseSelectorEventLoop.closec   sg    ??BCC>>>>%NN  "!DN &r,   c                    U R                  U R                  R                  5       5        U R                  R                  5         S U l        U R                  R                  5         S U l        U =R
                  S-  sl        g )Nr   )_remove_reader_ssockfilenorO   _csock_internal_fdsr*   s    r   rN   &BaseSelectorEventLoop._close_self_pipen   s\    DKK..01ar,   c                 F   [         R                  " 5       u  U l        U l        U R                  R	                  S5        U R                  R	                  S5        U =R
                  S-  sl        U R                  U R                  R                  5       U R                  5        g )NFr   )	socket
socketpairrT   rV   setblockingrW   _add_readerrU   _read_from_selfrX   s    r   r&   %BaseSelectorEventLoop._make_self_pipev   sq    #)#4#4#6 T[&&a++-t/C/CDr,   c                     g r1    r*   datas     r   _process_self_data(BaseSelectorEventLoop._process_self_data~   s    r,   c                       U R                   R                  S5      nU(       d  g U R                  U5        M7  ! [         a     ME  [         a     g f = f)Ni   )rT   recvre   InterruptedErrorBlockingIOErrorrc   s     r   r_   %BaseSelectorEventLoop._read_from_self   sV    {{''-''-  $ " s   "9 9 
A	AA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 socketTexc_info)rV   sendOSError_debugr   r"   )r*   csocks     r   _write_to_self$BaseSelectorEventLoop._write_to_self   sU     =	,JJu 	,{{ 0&*, 	,s   $ 0AAd   c                 `    U R                  UR                  5       U R                  XX4UXg5	        g r1   )r^   rU   _accept_connection)r*   protocol_factoryr4   rA   r/   backlogr;   r<   s           r   _start_serving$BaseSelectorEventLoop._start_serving   s-     	(?(?)W.	Fr,   c                    [        U5       Hy  n UR                  5       u  pU R                  (       a  [        R                  " SXJU	5        U	R                  S5        SU
0nU R                  XXUXg5      nU R                  U5        M{     g ! [        [        [        4 a       g [         a  nUR                  [        R                  [        R                  [        R                  [        R                   4;   a}  U R#                  SU[$        R&                  " U5      S.5        U R)                  UR+                  5       5        U R-                  [.        R0                  U R2                  XX4XVU5	         S nAGMh  e S nAff = f)Nz#%r got a new connection from %r: %rFpeernamez&socket.accept() out of system resource)message	exceptionr[   )rangeacceptrr   r   r"   r]   _accept_connection2create_taskrj   ri   ConnectionAbortedErrorrq   errnoEMFILEENFILEENOBUFSENOMEMcall_exception_handlerr   TransportSocketrS   rU   
call_laterr   ACCEPT_RETRY_DELAYr{   )r*   ry   r4   rA   r/   rz   r;   r<   _connaddrr.   r   excs                 r   rx   (BaseSelectorEventLoop._accept_connection   sF    wA")![[]
;;LL!F!'t5  '2 $T*11$Ev)A   (G   $%57MN  99u||!&!> >
 //#K%("("8"8">1 
 ''6OOI$@$@$($7$7$4J$+$8	: : 's%   AB

E:"	E:+CE54E55E:c                   #    S nS n	 U" 5       nU R                  5       n
U(       a  U R                  X(XJSX5UUS9	n	OU R                  X(XUS9n	 U
I S h  vN   g  N! [         a    U	R	                  5         S n
e f = f! [
        [        4 a    e [         aD  nU R                  (       a)  SUS.nUb  XS'   U	b  XS'   U R                  U5         S nAg  S nAg S nAff = f7f)NT)r6   r9   r.   r/   r;   r<   )r6   r.   r/   z3Error on transport creation for incoming connection)r   r   r5   	transport)	create_futurerC   r7   BaseExceptionrO   
SystemExitKeyboardInterruptrr   r   )r*   ry   r   r.   rA   r/   r;   r<   r5   r   r6   r   contexts                r   r   )BaseSelectorEventLoop._accept_connection2   s    
 	&	5')H'')F 44J $E*?)=	 5 ?	 !776! 8 #	  !  -. 	 	5{{ N!$
 '*2J'(+4K(++G44 	5sS   CAA; A AA CA A88A; ;C5C

CCCc                 N   Un[        U[        5      (       d   [        UR                  5       5      nU R                  R                  U5      nU(       a)  UR                  5       (       d  [        SU< SU< 35      eg g ! [        [        [
        4 a    [        SU< 35      S ef = f)NzInvalid file object: zFile descriptor z is used by transport )

isinstanceintrU   AttributeError	TypeError
ValueErrorr)   get
is_closingrL   )r*   r   rU   r   s       r   r2   -BaseSelectorEventLoop._ensure_fd_no_transport  s    &#&&KV]]_- $$((0	Y1133"2&(>-!" " 49	 #Iz: K #8!?@dJKs   A> >&B$c                    U R                  5         [        R                  " X#U S 5      nU R                  R	                  5       R                  U5      nUc/  U R                  R                  U[        R                  US 45        U$ UR                  UR                  snu  pxU R                  R                  X[        R                  -  XH45        Ub  UR                  5         U$ r1   )_check_closedr   Handler%   get_mapr   registerr    
EVENT_READrd   modifycancel	r*   r   callbackargshandler   maskreaderwriters	            r   r^   !BaseSelectorEventLoop._add_reader  s    xtT:nn$$&**2.;NN##B	(<(<%+TN4  &)ZZ"D"6NN!!"Y-A-A&A#)"24!r,   c                    U R                  5       (       a  gU R                  R                  5       R                  U5      nUc  gUR                  UR
                  snu  pEU[        R                  ) -  nU(       d  U R                  R                  U5        OU R                  R                  XS U45        Ub  UR                  5         gg)NFT)rM   r%   r   r   r   rd   r    r   
unregisterr   r   r*   r   r   r   r   r   s         r   rS   $BaseSelectorEventLoop._remove_reader!  s    >>nn$$&**2.;!$SXXv%%%%NN%%b)NN!!"T6N;MMOr,   c                    U R                  5         [        R                  " X#U S 5      nU R                  R	                  5       R                  U5      nUc/  U R                  R                  U[        R                  S U45        U$ UR                  UR                  snu  pxU R                  R                  X[        R                  -  Xt45        Ub  UR                  5         U$ r1   )r   r   r   r%   r   r   r   r    EVENT_WRITErd   r   r   r   s	            r   _add_writer!BaseSelectorEventLoop._add_writer4  s    xtT:nn$$&**2.;NN##B	(=(=%)6N4  &)ZZ"D"6NN!!"Y-B-B&B#)"24!r,   c                    U R                  5       (       a  gU R                  R                  5       R                  U5      nUc  gUR                  UR
                  snu  pEU[        R                  ) -  nU(       d  U R                  R                  U5        OU R                  R                  XUS45        Ub  UR                  5         gg)Remove a writer callback.FNT)rM   r%   r   r   r   rd   r    r   r   r   r   r   s         r   _remove_writer$BaseSelectorEventLoop._remove_writerC  s    >>nn$$&**2.;!$SXXv&&&&NN%%b)NN!!"VTN;MMOr,   c                 L    U R                  U5        U R                  " X/UQ76   g)zAdd a reader callback.N)r2   r^   r*   r   r   r   s       r   
add_reader BaseSelectorEventLoop.add_readerX  #    $$R(--r,   c                 F    U R                  U5        U R                  U5      $ )zRemove a reader callback.)r2   rS   r*   r   s     r   remove_reader#BaseSelectorEventLoop.remove_reader]  !    $$R(""2&&r,   c                 L    U R                  U5        U R                  " X/UQ76   g)zAdd a writer callback..N)r2   r   r   s       r   
add_writer BaseSelectorEventLoop.add_writerb  r   r,   c                 F    U R                  U5        U R                  U5      $ )r   )r2   r   r   s     r   remove_writer#BaseSelectorEventLoop.remove_writerg  r   r,   c                   #    [         R                  " U5        U R                  (       a  UR                  5       S:w  a  [	        S5      e UR                  U5      $ ! [        [        4 a     Of = fU R                  5       nUR                  5       nU R                  U5        U R                  X@R                  X1U5      nUR                  [        R                  " U R                   XES95        UI Sh  vN  $ 7f)zReceive data from the socket.

The return value is a bytes object representing the data received.
The maximum amount of data to be received at once is specified by
nbytes.
r   the socket must be non-blockingr   N)r   _check_ssl_socketrr   
gettimeoutr   rh   rj   ri   r   rU   r2   r^   
_sock_recvadd_done_callback	functoolspartial_sock_read_done)r*   r4   nfutr   r   s         r   	sock_recvBaseSelectorEventLoop.sock_recvl  s      	%%d+;;4??,1>??	99Q<!12 		  "[[]$$R(!!"oos!Dd22BF	Hyy7   AC8
A C8A.+C8-A..BC82C53C8c                 X    Ub  UR                  5       (       d  U R                  U5        g g r1   )	cancelledr   r*   r   r   r   s       r   r   %BaseSelectorEventLoop._sock_read_done  (    >!1!1!3!3r" "4r,   c                    UR                  5       (       a  g  UR                  U5      nUR                  U5        g ! [        [        4 a     g [
        [        4 a    e [         a  nUR                  U5         S nAg S nAff = fr1   )	donerh   
set_resultrj   ri   r   r   r   set_exception)r*   r   r4   r   rd   r   s         r   r    BaseSelectorEventLoop._sock_recv  sw     88::		!99Q<D NN4   !12 	-. 	 	#c""	#   ; BB&A<<Bc                   #    [         R                  " U5        U R                  (       a  UR                  5       S:w  a  [	        S5      e UR                  U5      $ ! [        [        4 a     Of = fU R                  5       nUR                  5       nU R                  U5        U R                  X@R                  X1U5      nUR                  [        R                  " U R                   XES95        UI Sh  vN  $ 7f)zReceive data from the socket.

The received data is written into *buf* (a writable buffer).
The return value is the number of bytes written.
r   r   r   N)r   r   rr   r   r   	recv_intorj   ri   r   rU   r2   r^   _sock_recv_intor   r   r   r   )r*   r4   bufr   r   r   s         r   sock_recv_into$BaseSelectorEventLoop.sock_recv_into  s      	%%d+;;4??,1>??	>>#&&!12 		  "[[]$$R(!!"&:&:CsKd22BF	Hyyr   c                    UR                  5       (       a  g  UR                  U5      nUR                  U5        g ! [        [        4 a     g [
        [        4 a    e [         a  nUR                  U5         S nAg S nAff = fr1   )	r   r   r   rj   ri   r   r   r   r   )r*   r   r4   r   nbytesr   s         r   r   %BaseSelectorEventLoop._sock_recv_into  sx     88::		#^^C(F NN6"  !12 	-. 	 	#c""	#r   c                   #    [         R                  " U5        U R                  (       a  UR                  5       S:w  a  [	        S5      e UR                  U5      $ ! [        [        4 a     Of = fU R                  5       nUR                  5       nU R                  U5        U R                  X@R                  X1U5      nUR                  [        R                  " U R                   XES95        UI Sh  vN  $ 7f)zReceive a datagram from a datagram socket.

The return value is a tuple of (bytes, address) representing the
datagram received and the address it came from.
The maximum amount of data to be received at once is specified by
nbytes.
r   r   r   N)r   r   rr   r   r   recvfromrj   ri   r   rU   r2   r^   _sock_recvfromr   r   r   r   )r*   r4   bufsizer   r   r   s         r   sock_recvfrom#BaseSelectorEventLoop.sock_recvfrom  s      	%%d+;;4??,1>??	==))!12 		  "[[]$$R(!!"&9&93gNd22BF	Hyyr   c                    UR                  5       (       a  g  UR                  U5      nUR                  U5        g ! [        [        4 a     g [
        [        4 a    e [         a  nUR                  U5         S nAg S nAff = fr1   )	r   r   r   rj   ri   r   r   r   r   )r*   r   r4   r   resultr   s         r   r   $BaseSelectorEventLoop._sock_recvfrom  sx     88::		#]]7+F NN6"  !12 	-. 	 	#c""	#r   c                   #    [         R                  " U5        U R                  (       a  UR                  5       S:w  a  [	        S5      eU(       d  [        U5      n UR                  X#5      $ ! [        [        4 a     Of = fU R                  5       nUR                  5       nU R                  U5        U R                  XPR                  XAUU5      nUR                  [        R                   " U R"                  XVS95        UI Sh  vN  $ 7f)zReceive data from the socket.

The received data is written into *buf* (a writable buffer).
The return value is a tuple of (number of bytes written, address).
r   r   r   N)r   r   rr   r   r   lenrecvfrom_intorj   ri   r   rU   r2   r^   _sock_recvfrom_intor   r   r   r   )r*   r4   r   r   r   r   r   s          r   sock_recvfrom_into(BaseSelectorEventLoop.sock_recvfrom_into  s      	%%d+;;4??,1>??XF	%%c22!12 		  "[[]$$R(!!"&>&>3"(*d22BF	Hyys7   ADA- ,D-B =D?B  BDDDc                    UR                  5       (       a  g  UR                  X45      nUR                  U5        g ! [        [        4 a     g [
        [        4 a    e [         a  nUR                  U5         S nAg S nAff = fr1   )	r   r   r   rj   ri   r   r   r   r   )r*   r   r4   r   r   r   r   s          r   r   )BaseSelectorEventLoop._sock_recvfrom_into  sz     88::		#''5F NN6"  !12 	-. 	 	#c""	#r   c           	      0  #    [         R                  " U5        U R                  (       a  UR                  5       S:w  a  [	        S5      e UR                  U5      nU[        U5      :X  a  gU R                  5       nUR                  5       nU R                  U5        U R                  XPR                  XA[        U5      U/5      nUR                  [         R"                  " U R$                  XVS95        UI Sh  vN $ ! [        [        4 a    Sn Nf = f N7f)j  Send data to the socket.

The socket must be connected to a remote socket. This method continues
to send data from data until either all data has been sent or an
error occurs. None is returned on success. On error, an exception is
raised, and there is no way to determine how much data, if any, was
successfully processed by the receiving end of the connection.
r   r   Nr   )r   r   rr   r   r   rp   rj   ri   r   r   rU   r2   r   _sock_sendall
memoryviewr   r   r   _sock_write_done)r*   r4   rd   r   r   r   r   s          r   sock_sendall"BaseSelectorEventLoop.sock_sendall  s      	%%d+;;4??,1>??			$A D	>  "[[]$$R(!!"&8&8#",T"2QC9d33RG	Iy  !12 	A	 s7   AD
C< BD7D8D<DDDDc                 F   UR                  5       (       a  g US   n UR                  X5S  5      nXV-  nU[        U5      :X  a  UR                  S 5        g XTS'   g ! [        [        4 a     g [        [
        4 a    e [         a  nUR                  U5         S nAg S nAff = fNr   )
r   rp   rj   ri   r   r   r   r   r   r   )r*   r   r4   viewposstartr   r   s           r   r  #BaseSelectorEventLoop._sock_sendall-  s    88::A			$v,'A 	
CINN4 F  !12 	-. 	 	c"	s   A B ,B BB c                   #    [         R                  " U5        U R                  (       a  UR                  5       S:w  a  [	        S5      e UR                  X#5      $ ! [        [        4 a     Of = fU R                  5       nUR                  5       nU R                  U5        U R                  XPR                  XAUU5      nUR                  [        R                  " U R                   XVS95        UI Sh  vN  $ 7f)r  r   r   r   N)r   r   rr   r   r   sendtorj   ri   r   rU   r2   r   _sock_sendtor   r   r   r	  )r*   r4   rd   rG   r   r   r   s          r   sock_sendto!BaseSelectorEventLoop.sock_sendtoC  s      	%%d+;;4??,1>??	;;t--!12 		   "[[]$$R(!!"&7&7D")+d33RG	Iyys7   AC9
A C9A.+C9-A..BC93C64C9c                    UR                  5       (       a  g  UR                  USU5      nUR                  U5        g ! [        [        4 a     g [
        [        4 a    e [         a  nUR                  U5         S nAg S nAff = fr  )	r   r  r   rj   ri   r   r   r   r   )r*   r   r4   rd   rG   r   r   s          r   r  "BaseSelectorEventLoop._sock_sendto^  sz    88::		D!W-A NN1  !12 	-. 	 	#c""	#s   = BB(A>>Bc                 0  #    [         R                  " U5        U R                  (       a  UR                  5       S:w  a  [	        S5      eUR
                  [        R                  :X  d3  [         R                  (       a`  UR
                  [        R                  :X  aB  U R                  X!R
                  UR                  UR                  U S9I Sh  vN nUS   u        pBU R                  5       nU R                  XQU5         UI Sh  vN Sn$  N= N! Snf = f7f)zDConnect to a remote socket at address.

This method is a coroutine.
r   r   )familytypeprotoloopN)r   r   rr   r   r   r  r[   AF_INET	_HAS_IPv6AF_INET6_ensure_resolvedr  r  r   _sock_connect)r*   r4   rG   resolvedr   r   s         r   sock_connect"BaseSelectorEventLoop.sock_connectm  s     
 	%%d+;;4??,1>??;;&..(%%$++*H!22$))4:: 3  H #+1+Aq!Q  "3g.	9 C  Cs<   CDD0D?D DD DD DDc           	         UR                  5       n UR                  U5        UR                  S 5        S ng ! [        [        4 a_    U R                  U5        U R                  X@R                  XU5      nUR                  [        R                  " U R                  XES95         Nq[        [        4 a    e [         a  nUR                  U5         S nANS nAff = f! S nf = f)Nr   )rU   connectr   rj   ri   r2   r   _sock_connect_cbr   r   r   r	  r   r   r   r   )r*   r   r4   rG   r   r   r   s          r   r"  #BaseSelectorEventLoop._sock_connect  s    [[]	LL!  NN4 C#  !12 		M
 ((,%%))3g?F!!!!$"7"7KM-. 	 	#c""	#
 Cs9   7 C A,C#C %C>CC CC C c                 X    Ub  UR                  5       (       d  U R                  U5        g g r1   )r   r   r   s       r   r	  &BaseSelectorEventLoop._sock_write_done  r   r,   c                    UR                  5       (       a  g  UR                  [        R                  [        R                  5      nUS:w  a  [        USU 35      e UR                  S 5        S ng ! [        [        4 a     N[        [        4 a    e [         a  nUR                  U5         S nANDS nAff = f! S nf = f)Nr   zConnect call failed )r   
getsockoptr[   
SOL_SOCKETSO_ERRORrq   r   rj   ri   r   r   r   r   )r*   r   r4   rG   errr   s         r   r(  &BaseSelectorEventLoop._sock_connect_cb  s    88::	//&"3"3V__ECaxc%9'#CDD  NN4 C  !12 	-. 	 	#c""	#
 Cs<   AA0 B9 0B6 B9 B6B1,B9 1B66B9 9B=c                    #    [         R                  " U5        U R                  (       a  UR                  5       S:w  a  [	        S5      eU R                  5       nU R                  X!5        UI Sh  vN $  N7f)a/  Accept a connection.

The socket must be bound to an address and listening for connections.
The return value is a pair (conn, address) where conn is a new socket
object usable to send and receive data on the connection, and address
is the address bound to the socket on the other end of the connection.
r   r   N)r   r   rr   r   r   r   _sock_accept)r*   r4   r   s      r   sock_accept!BaseSelectorEventLoop.sock_accept  s\      	%%d+;;4??,1>??  "#$yys   A-A6/A40A6c           	         UR                  5       n UR                  5       u  pEUR                  S5        UR                  XE45        g ! [        [
        4 a^    U R                  U5        U R                  X0R                  X5      nUR                  [        R                  " U R                  X6S95         g [        [        4 a    e [         a  nUR!                  U5         S nAg S nAff = f)NFr   )rU   r   r]   r   rj   ri   r2   r^   r3  r   r   r   r   r   r   r   r   )r*   r   r4   r   r   rG   r   r   s           r   r3  "BaseSelectorEventLoop._sock_accept  s    [[]	, KKMMDU# NND?+  !12 	L((,%%b*;*;SGF!!!!$"6"6JL-. 	 	#c""	#s   #A A+C)5C)C$$C)c                    #    U R                   UR                  	 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         XR                   UR                  '   $  Nh NE! UR                  5         U(       a  UR                  5         XR                   UR                  '   f = f7f)NF)fallback)	r)   _sock_fd
is_readingpause_reading_make_empty_waitersock_sendfile_sock_reset_empty_waiterresume_reading)r*   transpfileoffsetcountrA  s         r   _sendfile_native&BaseSelectorEventLoop._sendfile_native  s     V__-**,'')))	7++FLL$5: , < < &&(%%'06V__- 	*< &&(%%'06V__-s>   AC>B6C>B: 2B83B: 6AC>8B: :AC;;C>c                    U H  u  p#UR                   UR                  snu  pVU[        R                  -  (       a7  Ub4  UR                  (       a  U R                  U5        OU R                  U5        U[        R                  -  (       d  M  Uc  M  UR                  (       a  U R                  U5        M  U R                  U5        M     g r1   )	fileobjrd   r    r   
_cancelledrS   _add_callbackr   r   )r*   
event_listr   r   rI  r   r   s          r   _process_events%BaseSelectorEventLoop._process_events  s    #IC(+SXX%G%fi***v/A$$''0&&v.i++++0B$$''0&&v. $r,   c                 b    U R                  UR                  5       5        UR                  5         g r1   )rS   rU   rO   )r*   r4   s     r   _stop_serving#BaseSelectorEventLoop._stop_serving  s    DKKM*

r,   )rV   r%   rT   r)   r1   NNN)r   )6r$   
__module____qualname____firstlineno____doc__r   r7   r   SSL_HANDSHAKE_TIMEOUTSSL_SHUTDOWN_TIMEOUTrC   rH   rO   rN   r&   re   r_   rt   r{   rx   r   r2   r^   rS   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r
  r  r  r  r$  r"  r	  r(  r4  r3  rF  rM  rP  __static_attributes____classcell__r#   s   @r   r   r   5   st   
97%)$7 9=+ $t"+"A"A!*!?!?+& CGB	" E
,& #'tS-6-L-L,5,J,JF D#"+"A"A!*!?!?	,)` D"+"A"A!*!?!?	-5^"&*.
'
.
'
,#! *#".#"2#">,62.#*,"7/ r,   r   c                      ^  \ rS 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S rS rS r\R"                  4S jrSS jrS rS rS rS rSrU =r$ )_SelectorTransporti  i   Nc                   > [         TU ]  XA5        [        R                  " U5      U R                  S'    UR                  5       U R                  S'   SU R                  ;  a   UR                  5       U R                  S'   X l
        UR                  5       U l        SU l        U R                  U5        XPl        [         R"                  " 5       U l        SU l        SU l        SU l        U R                  b  U R                  R-                  U 5        XR.                  U R                  '   g ! [         a    S U R                  S'    Nf = f! [        R                   a    S U R                  S'    Nf = f)Nr[   socknamer~   Fr   )r   r   r   r   _extragetsocknamerq   getpeernamer[   errorr?  rU   r:  _protocol_connectedset_protocol_servercollectionsdeque_buffer
_conn_lost_closing_paused_attachr)   )r*   r  r4   r5   r.   r/   r#   s         r   r   _SelectorTransport.__init__  s2   % & 6 6t <H	+&*&6&6&8DKK
# T[[(/*.*:*:*<J' 
#( (#"((*<<#LL  &*.'+  	+&*DKK
#	+
 << /*.J'/s#   D) #E )EE#E.-E.c                 &   U R                   R                  /nU R                  c  UR                  S5        O"U R                  (       a  UR                  S5        UR                  SU R
                   35        U R                  b  U R                  R                  5       (       d  [        U R                  R                  U R
                  [        R                  5      nU(       a  UR                  S5        OUR                  S5        [        U R                  R                  U R
                  [        R                  5      nU(       a  SnOSnU R                  5       nUR                  SU S	U S
35        SR                  SR                  U5      5      $ )Nclosedclosingzfd=zread=pollingz	read=idlepollingidlezwrite=<z
, bufsize=>z<{}> )r#   r$   r?  appendrk  r:  _looprM   r   r%   r    r   r   get_write_buffer_sizeformatjoin)r*   inforr  stater   s        r   __repr___SelectorTransport.__repr__  s'   ''(::KK!]]KK	"c$--)*::!$***>*>*@*@*4::+?+?+/==):N:NPGN+K(*4::+?+?+/==+4+@+@BG !002GKK'%
7)1=>}}SXXd^,,r,   c                 &    U R                  S 5        g r1   )_force_closerX   s    r   abort_SelectorTransport.abort9  s    $r,   c                     Xl         SU l        g NT)	_protocolrd  )r*   r5   s     r   re  _SelectorTransport.set_protocol<  s    !#' r,   c                     U R                   $ r1   )r  rX   s    r   get_protocol_SelectorTransport.get_protocol@  s    ~~r,   c                     U R                   $ r1   )rk  rX   s    r   r   _SelectorTransport.is_closingC  s    }}r,   c                 \    U R                  5       (       + =(       a    U R                  (       + $ r1   )r   rl  rX   s    r   r;  _SelectorTransport.is_readingF  s    ??$$9T\\)99r,   c                     U R                  5       (       d  g SU l        U R                  R                  U R                  5        U R                  R                  5       (       a  [        R                  " SU 5        g g )NTz%r pauses reading)r;  rl  rw  rS   r:  	get_debugr   r"   rX   s    r   r<   _SelectorTransport.pause_readingI  sV      

!!$--0::!!LL,d3 "r,   c                    U R                   (       d  U R                  (       d  g SU l        U R                  U R                  U R                  5        U R
                  R                  5       (       a  [        R                  " SU 5        g g )NFz%r resumes reading)	rk  rl  r^   r:  _read_readyrw  r  r   r"   rX   s    r   rA  !_SelectorTransport.resume_readingQ  sZ    ==(8(89::!!LL-t4 "r,   c                 d   U R                   (       a  g SU l         U R                  R                  U R                  5        U R                  (       da  U =R
                  S-  sl        U R                  R                  U R                  5        U R                  R                  U R                  S 5        g g NTr   )	rk  rw  rS   r:  ri  rj  r   	call_soon_call_connection_lostrX   s    r   rO   _SelectorTransport.closeY  ss    ==

!!$--0||OOq OJJ%%dmm4JJ  !;!;TB r,   c                     U R                   bT  U" SU < 3[        U S9  U R                   R                  5         U R                  b  U R                  R	                  U 5        g g g )Nzunclosed transport )source)r?  ResourceWarningrO   rf  _detach)r*   _warns     r   __del___SelectorTransport.__del__c  sV    ::!'x0/$OJJ||'$$T* ( "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 )Nz%r: %sTrn   )r   r   r   r5   )	r   rq   rw  r  r   r"   r   r  r  )r*   r   r   s      r   _fatal_error_SelectorTransport._fatal_errorj  sj    c7##zz##%%XttDJJ--" ! NN	/  	#r,   c                    U R                   (       a  g U R                  (       a?  U R                  R                  5         U R                  R	                  U R
                  5        U R                  (       d,  SU l        U R                  R                  U R
                  5        U =R                   S-  sl         U R                  R                  U R                  U5        g r  )
rj  ri  clearrw  r   r:  rk  rS   r  r  )r*   r   s     r   r  _SelectorTransport._force_closex  s    ??<<LL JJ%%dmm4}} DMJJ%%dmm41

T77=r,   c                     U R                   (       a  U R                  R                  U5        U R                  R	                  5         S U l        S U l        S U l        U R                  nUb  UR                  U 5        S U l        g g ! U R                  R	                  5         S U l        S U l        S U l        U R                  nUb  UR                  U 5        S U l        f f = fr1   )rd  r  connection_lostr?  rO   rw  rf  r  )r*   r   r/   s      r   r  (_SelectorTransport._call_connection_lost  s    	$''..s3JJDJ!DNDJ\\F!t$# " JJDJ!DNDJ\\F!t$# "s   ,B ACc                 H    [        [        [        U R                  5      5      $ r1   )summapr   ri  rX   s    r   rx  (_SelectorTransport.get_write_buffer_size  s    3sDLL)**r,   c                 j    U R                  5       (       d  g U R                  R                  " X/UQ76   g r1   )r;  rw  r^   r   s       r   r^   _SelectorTransport._add_reader  s)      

r3d3r,   )
ri  rk  rj  rw  rl  r  rd  rf  r?  r:  )NN)zFatal error on transport)r$   rS  rT  rU  max_sizer?  r   r}  r  re  r  r   r;  r<  rA  rO   warningswarnr  r  r  r  rx  r^   rY  rZ  r[  s   @r   r]  r]    sp     H
 E/8-8 (:45C %MM +
>$+4 4r,   r]  c                      ^  \ rS rSrSr\R                  R                  r  SU 4S jjr	U 4S jr
S rS rS rS	 rS
 rS rS rS\SS4S jrS rS rS rS rU 4S jrS rS rU 4S jrSrU =r$ )r3   i  TNc                 "  > S U l         [        TU ]	  XX5U5        SU l        S U l        [
        (       a  U R                  U l        OU R                  U l        [        R                  " U R                  5        U R                  R                  U R                  R                  U 5        U R                  R                  U R                   U R"                  U R$                  5        Ub,  U R                  R                  [&        R(                  US 5        g g r   )_read_ready_cbr   r   _eof_empty_waiter_HAS_SENDMSG_write_sendmsg_write_ready_write_sendr   _set_nodelayr?  rw  r  r  connection_mader^   r:  r  r   _set_result_unless_cancelled)r*   r  r4   r5   r6   r.   r/   r#   s          r   r   !_SelectorSocketTransport.__init__  s     #Xf=	!< $ 3 3D $ 0 0D 	  ,

T^^;;TB

T--!]]D,<,<	>JJ  !E!E!'/ r,   c                    > [        U[        R                  5      (       a  U R                  U l        OU R
                  U l        [        TU ]  U5        g r1   )r   r	   BufferedProtocol_read_ready__get_bufferr  _read_ready__data_receivedr   re  )r*   r5   r#   s     r   re  %_SelectorSocketTransport.set_protocol  s?    h	 : :;;"&">">D"&"A"ADX&r,   c                 $    U R                  5         g r1   )r  rX   s    r   r  $_SelectorSocketTransport._read_ready  s    r,   c                    U R                   (       a  g  U R                  R                  S5      n[        U5      (       d  [	        S5      e  U R                  R                  U5      nU(       d  U R                  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! [        [        4 a     g [
        [        4 a    e [         a  nU R                  US5         S nAg S nAff = f! [
        [        4 a    e [         a  nU R                  US5         S nAg S nAff = f)Nz%get_buffer() returned an empty bufferz/Fatal error: protocol.get_buffer() call failed.$Fatal read error on socket transportz3Fatal error: protocol.buffer_updated() call failed.)rj  r  
get_bufferr   rL   r   r   r   r  r?  r   rj   ri   _read_ready__on_eofbuffer_updated)r*   r   r   r   s       r   r  0_SelectorSocketTransport._read_ready__get_buffer  sE   ??		..++B/Cs88"#JKK 	ZZ))#.F $$&	LNN))&1- -. 	 	FH	  !12 	-. 	 	c#IJ	 -. 	 	LJL L	LsM   6B C  D C6CCD'D DDE9EEc                    U R                   (       a  g  U R                  R                  U R                  5      nU(       d  U R                  5         g  U R                  R                  U5        g ! [        [
        4 a     g [        [        4 a    e [         a  nU R                  US5         S nAg S nAff = f! [        [        4 a    e [         a  nU R                  US5         S nAg S nAff = f)Nr  z2Fatal error: protocol.data_received() call failed.)rj  r?  rh   r  rj   ri   r   r   r   r  r  r  data_received)r*   rd   r   s      r   r  3_SelectorSocketTransport._read_ready__data_received  s    ??	::??4==1D $$&	KNN((.  !12 	-. 	 	c#IJ	 -. 	 	KIK K	Ks5   %A. B8 .B5 B5B00B58C.C))C.c                    U R                   R                  5       (       a  [        R                  " SU 5         U R                  R                  5       nU(       a&  U R                   R                  U R                  5        g U R                  5         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.)rw  r  r   r"   r  eof_receivedr   r   r   r  rS   r:  rO   )r*   	keep_openr   s      r   r  ,_SelectorSocketTransport._read_ready__on_eof  s    ::!!LL*D1	335I  JJ%%dmm4JJL -. 	 	HJ	s   B C*CC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                  (       dc   U R                   R#                  U5      n[        U5      US  nU(       d  g  U R0                  R3                  U R4                  U R6                  5        U R                  R9                  U5        U R;                  5         g ! [$        [&        4 a     Nn[(        [*        4 a    e [,         a  nU R/                  US5         S nAg S nAff = f)N/data argument must be a bytes-like object, not z%Cannot call write() after write_eof()z(unable to write; sendfile is in progresssocket.send() raised exception.r   %Fatal write error on socket transport)r   bytes	bytearrayr  r   r  r$   r  rL   r  rj  r   !LOG_THRESHOLD_FOR_CONNLOST_WRITESr   warningri  r?  rp   rj   ri   r   r   r   r  rw  r   r:  r  rv  _maybe_pause_protocol)r*   rd   r   r   s       r   write_SelectorSocketTransport.write  si   $	: >?? ##':#6#6"9; < <99FGG)IJJ??)"M"MM@AOOq O||JJOOD) "$'+  JJ""4==$2C2CD 	D!""$! $%56  12   !!#'NOs   ,E: :GG%F<<Gc                 L    [         R                  " U R                  [        5      $ r1   )	itertoolsisliceri  r   rX   s    r   _get_sendmsg_buffer,_SelectorSocketTransport._get_sendmsg_buffer>  s    j99r,   c                    U R                   (       d   S5       eU R                  (       a  g  U R                  R                  U R	                  5       5      nU R                  U5        U R                  5         U R                   (       d  U R                  R                  U R                  5        U R                  b  U R                  R                  S 5        U R                  (       a  U R                  S 5        g U R                  (       a*  U R                  R                  [         R"                  5        g g g ! [$        [&        4 a     g [(        [*        4 a    e [,         a  nU R                  R                  U R                  5        U R                   R/                  5         U R1                  US5        U R                  b   U R                  R3                  U5         S nAg  S nAg S nAff = fNzData should not be emptyr  )ri  rj  r?  r   r  _adjust_leftover_buffer_maybe_resume_protocolrw  r   r:  r  r   rk  r  r  shutdownr[   SHUT_WRrj   ri   r   r   r   r  r  r   )r*   r   r   s      r   r  '_SelectorSocketTransport._write_sendmsgA  sh   ||777|??	8ZZ''(@(@(BCF((0 '')<<

))$--8%%1&&11$7==..t4YYJJ''7     !12 	-. 	 	6JJ%%dmm4LL c#JK!!-""0055 .		6s   :D4 4G'G'A9G""G'r   returnc                     U R                   nU(       aC  UR                  5       n[        U5      nXA::  a  X-  nOUR                  X1S  5        g U(       a  MB  g g r1   )ri  popleftr   
appendleft)r*   r   bufferbb_lens        r   r  0_SelectorSocketTransport._adjust_leftover_buffer]  sK     AFE!!!G*- fr,   c                 "   U R                   (       d   S5       eU R                  (       a  g  U R                   R                  5       nU R                  R	                  U5      nU[        U5      :w  a  U R                   R                  XS  5        U R                  5         U R                   (       d  U R                  R                  U R                  5        U R                  b  U R                  R                  S 5        U R                  (       a  U R                  S 5        g U R                  (       a*  U R                  R!                  ["        R$                  5        g g g ! [&        [(        4 a     g [*        [,        4 a    e [.         a  nU R                  R                  U R                  5        U R                   R1                  5         U R3                  US5        U R                  b   U R                  R5                  U5         S nAg  S nAg S nAff = fr  )ri  rj  r  r?  rp   r   r  r  rw  r   r:  r  r   rk  r  r  r  r[   r  rj   ri   r   r   r   r  r  r   )r*   r  r   r   s       r   r  $_SelectorSocketTransport._write_sendh  s   ||777|??	8\\))+F

'ACK''r
3 '')<<

))$--8%%1&&11$7==..t4YYJJ''7     !12 	-. 	 	6JJ%%dmm4LL c#JK!!-""0055 .		6s   A!E H-HA9H		Hc                     U R                   (       d  U R                  (       a  g SU l        U R                  (       d*  U R                  R	                  [
        R                  5        g g r  )rk  r  ri  r?  r  r[   r  rX   s    r   	write_eof"_SelectorSocketTransport.write_eof  s;    ==DII	||JJ/ r,   c                    U R                   (       a  [        S5      eU R                  b  [        S5      eU(       d  g U R                  R	                  U Vs/ s H  n[        U5      PM     sn5        U R                  5         U R                  (       aA  U R                  R                  U R                  U R                  5        U R                  5         g g s  snf )Nz*Cannot call writelines() after write_eof()z-unable to writelines; sendfile is in progress)r  rL   r  ri  extendr  r  rw  r   r:  r  )r*   list_of_datard   s      r   
writelines#_SelectorSocketTransport.writelines  s    99KLL)NOO,G,$Z-,GH<<JJ""4==$2C2CD&&(  Hs   Cc                     gr  rb   rX   s    r   can_write_eof&_SelectorSocketTransport.can_write_eof  s    r,   c                   >  [         TU ]  U5        S U l        U R                  b%  U R                  R	                  [        S5      5        g g ! S U l        U R                  b%  U R                  R	                  [        S5      5        f f = f)NzConnection is closed by peer)r   r  r  r  r   ConnectionError)r*   r   r#   s     r   r  ._SelectorSocketTransport._call_connection_lost  s    	EG)#. $D!!-""00#$BCE . !%D!!-""00#$BCE .s   A ;Bc                     U R                   b  [        S5      eU R                  R                  5       U l         U R                  (       d  U R                   R                  S 5        U R                   $ )NzEmpty waiter is already set)r  rL   rw  r   ri  r   rX   s    r   r=  +_SelectorSocketTransport._make_empty_waiter  sV    )<==!ZZ557||))$/!!!r,   c                     S U l         g r1   )r  rX   s    r   r@  ,_SelectorSocketTransport._reset_empty_waiter  s
    !r,   c                 0   > S U l         [        TU ]	  5         g r1   )r  r   rO   rP   s    r   rO   _SelectorSocketTransport.close  s    "r,   )r  r  r  r  rR  )r$   rS  rT  rU  _start_tls_compatibler   _SendfileMode
TRY_NATIVE_sendfile_compatibler   re  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r=  r@  rO   rY  rZ  r[  s   @r   r3   r3     s     $22==48$(/2'#LJK2*%%N:88	c 	d 	8>0)E"" r,   r3   c                   d   ^  \ rS rSr\R
                  r  SU 4S jjrS rS r	S	S jr
S rSrU =r$ )
rF   i  c                 t  > [         TU ]  XX65        X@l        SU l        U R                  R                  U R                  R                  U 5        U R                  R                  U R                  U R                  U R                  5        Ub,  U R                  R                  [        R                  US 5        g g r  )r   r   _address_buffer_sizerw  r  r  r  r^   r:  r  r   r  )r*   r  r4   r5   rG   r6   r.   r#   s          r   r   #_SelectorDatagramTransport.__init__  s    X5

T^^;;TB

T--!]]D,<,<	>JJ  !E!E!'/ r,   c                     U R                   $ r1   )r  rX   s    r   rx  0_SelectorDatagramTransport.get_write_buffer_size  s       r,   c                    U R                   (       a  g  U R                  R                  U R                  5      u  pU R                  R                  X5        g ! [        [        4 a     g [         a%  nU R                  R                  U5         S nAg S nAf[        [        4 a    e [         a  nU R                  US5         S nAg S nAff = f)Nz&Fatal read error on datagram transport)rj  r?  r   r  r  datagram_receivedrj   ri   rq   error_receivedr   r   r   r  r*   rd   r   r   s       r   r  &_SelectorDatagramTransport._read_ready  s    ??	9,,T]];JD NN,,T8  !12 	 	/NN))#..-. 	 	Mc#KLL	Ms)   'A C)	C2BC/CCc                    [        U[        [        [        45      (       d"  [	        S[        U5      R                  < 35      eU R                  (       a6  US U R                  4;  a  [        SU R                   35      eU R                  nU R                  (       a[  U R                  (       aJ  U R                  [        R                  :  a  [        R                  " S5        U =R                  S-  sl	        g U R                  (       dM   U R                  S   (       a  U R                   R#                  U5        g U R                   R%                  X5        g U R                  RA                  [        U5      U45        U =RB                  [E        U5      S-   -  sl!        U RG                  5         g ! [&        [(        4 a3    U R*                  R-                  U R.                  U R0                  5         N[2         a%  nU R4                  R7                  U5         S nAg S nAf[8        [:        4 a    e [<         a  nU R?                  US5         S nAg S nAff = f)Nr  z!Invalid address: must be None or r  r   r~   'Fatal write error on datagram transport   )$r   r  r  r  r   r  r$   r  r   rj  r   r  r   r  ri  r`  r?  rp   r  rj   ri   rw  r   r:  _sendto_readyrq   r  r  r   r   r   r  rv  r  r   r  r  s       r   r  !_SelectorDatagramTransport.sendto  s   $	: >?? ##':#6#6"9; < < ==D$--00 7GI I==D??t}})"M"MM@AOOq O||;;z*JJOOD)  JJ%%d1 	U4[$/0SY]*""$ $%56 J

&&t}}d6H6HI --c2 12   !!BDs1   /F, 8F, ,A I.	I7HI4IIc                    U R                   (       a  U R                   R                  5       u  pU =R                  [        U5      -  sl         U R                  S   (       a  U R
                  R                  U5        OU R
                  R                  X5         U R                   (       a  M  U R%                  5         U R                   (       dI  U R&                  R)                  U R*                  5        U R,                  (       a  U R/                  S 5        g g g ! [        [        4 a>    U R                   R                  X45        U =R                  [        U5      -  sl         M  [         a%  nU R                  R                  U5         S nAg S nAf[        [        4 a    e [          a  nU R#                  US5         S nAg S nAff = f)Nr~   r  )ri  r  r  r   r`  r?  rp   r  rj   ri   r  rq   r  r  r   r   r   r  r  rw  r   r:  rk  r  r  s       r   r  (_SelectorDatagramTransport._sendto_ready  sM   ll--/JDT*;;z*JJOOD)JJ%%d1 lll, 	##%||JJ%%dmm4}}**40   $%56 ''5!!SY.! --c2 12   !!BDs1   /D =D A
G$	G-FG*GG)r  r  rR  r1   )r$   rS  rT  rU  rg  rh  _buffer_factoryr   rx  r  r  r  rY  rZ  r[  s   @r   rF   rF     s3    !''O59$(/!9 (%T1 1r,   rF   )&rV  __all__rg  r   r   r  osr    r[   r  r'   sslImportError r   r   r   r   r	   r
   r   r   logr   hasattrr  sysconfr   rq   r   BaseEventLoopr   _FlowControlMixin	Transportr]  r3   DatagramTransportrF   rb   r,   r   <module>r-     s   #     	             v}}i0ZZ-

(
K55 
Da455#--a4HZ1 Zzj1!3Z5Q5Q j1I%  
C$  s#   C+ ?C9 +C65C69DD