h;ndZdZddlZddlZddlZddlZddlZddlZddlZ ddl Z n #e $rdZ YnwxYwddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd lmZdZGdde jZGddejejZGddeZGddeZdS)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. )BaseSelectorEventLoopN) base_events) constants)events)futures) protocols)sslproto) transports)trsock)loggerc~ ||}t|j|zS#t$rYdSwxYwNF)get_keyboolrKeyError)selectorfdeventkeys ./usr/lib/python3.11/asyncio/selector_events.py_test_selector_eventr sU(r""CJ&''' uus . <<ceZdZdZd4fd Zd4ddddZ d4ddddejejddZ d5d Z fd Z d Z d Z d ZdZdZdddejejfdZdddejejfdZddejejfdZdZdZdZdZdZdZdZdZdZdZd4dZdZd Z d!Z!d"Z"d#Z#d6d%Z$d&Z%d'Z&d(Z'd)Z(d*Z)d+Z*d,Z+d4d-Z,d.Z-d/Z.d0Z/d1Z0d2Z1d3Z2xZ3S)7rzJSelector event loop. See events.EventLoop for API specification. Nct|tj}t jd|jj||_| tj |_ dS)NzUsing selector: %s) super__init__ selectorsDefaultSelectorr debug __class____name__ _selector_make_self_pipeweakrefWeakValueDictionary _transports)selfrr s rrzBaseSelectorEventLoop.__init__1sv    022H )8+=+FGGG! "688extraserverc*t||||||SN)_SelectorSocketTransport)r'sockprotocolwaiterr*r+s r_make_socket_transportz,BaseSelectorEventLoop._make_socket_transport;s!'dHf(-v77 7r(F) server_sideserver_hostnamer*r+ssl_handshake_timeoutssl_shutdown_timeoutc ptj||||||| | } t||| ||| jS)N)r5r6r))r SSLProtocolr._app_transport) r'rawsockr0 sslcontextr1r3r4r*r+r5r6 ssl_protocols r_make_ssl_transportz)BaseSelectorEventLoop._make_ssl_transport@s\ + (J "7!5    !w ',V = = = =**r(c*t||||||Sr-)_SelectorDatagramTransport)r'r/r0addressr1r*s r_make_datagram_transportz.BaseSelectorEventLoop._make_datagram_transportQs$)$h*165BB Br(c4|rtd|rdS|t |j"|jd|_dSdS)Nz!Cannot close a running event loop) is_running RuntimeError is_closed_close_self_pipercloser")r'r s rrGzBaseSelectorEventLoop.closeVs ??   DBCC C >>    F    > % N " " "!DNNN & %r(c||j|jd|_|jd|_|xjdzc_dS)Nr)_remove_reader_ssockfilenorG_csock _internal_fdsr's rrFz&BaseSelectorEventLoop._close_self_pipeast DK..00111     ar(c2tj\|_|_|jd|jd|xjdz c_||j|jdS)NFr) socket socketpairrJrL setblockingrM _add_readerrK_read_from_selfrNs rr#z%BaseSelectorEventLoop._make_self_pipeis#)#4#6#6  T[ &&& &&& a ++--t/CDDDDDr(cdSr-r'datas r_process_self_dataz(BaseSelectorEventLoop._process_self_dataqs r(c |jd}|sdS||n#t$rYBt$rYdSwxYwR)NTi)rJrecvrYInterruptedErrorBlockingIOErrorrWs rrTz%BaseSelectorEventLoop._read_from_selfts  {''--E''----#   "     s77 A AAc|j}|dS |ddS#t$r$|jrt jddYdSYdSwxYw)Nz3Fail to write a null byte into the self-pipe socketTexc_info)rLsendOSError_debugr r)r'csocks r_write_to_selfz$BaseSelectorEventLoop._write_to_selfs   = F , JJu      , , ,{ , 0&*,,,,,,, , , , ,s$'AAdc n|||j||||||| dSr-)rSrK_accept_connection)r'protocol_factoryr/r;r+backlogr5r6s r_start_servingz$BaseSelectorEventLoop._start_servingsK (?)4VW.0D F F F F Fr(c t|D]h} |\} } |jrtjd|| | | dd| i} ||| | ||||} || #tttf$rYdSt$r} | j tj tjtjtjfvr|d| t%j|d|||t.j|j||||||| nYd} ~ bd} ~ wwxYwdS)Nz#%r got a new connection from %r: %rFpeernamez&socket.accept() out of system resource)message exceptionrP)rangeacceptrdr rrR_accept_connection2 create_taskr]r\ConnectionAbortedErrorrcerrnoEMFILEENFILEENOBUFSENOMEMcall_exception_handlerr TransportSocketrIrK call_laterrACCEPT_RETRY_DELAYrl)r'rjr/r;r+rkr5r6_connaddrr*rrexcs rriz(BaseSelectorEventLoop._accept_connectionsw# )# )A" )![[]] d;5L!F!'t555  '''2$T*11$dE:v)+?AA  ((((9$%57MN   ttt   9u|!& !>>> //#K%("("8">">11 '' 666OOI$@$($7$4dJ$+-B$8 ::::  ::::: # )# )sA BE7. E77B5E22E7c Kd}d} |}|} |r||||| d|||| } n|||| ||} | d{VdS#t$r| wxYw#t t f$rt$r@} |jr.d| d} ||| d<| | | d<|| Yd} ~ dSYd} ~ dSd} ~ wwxYw)NT)r1r3r*r+r5r6)r1r*r+z3Error on transport creation for incoming connection)rorpr0 transport) create_futurer=r2 BaseExceptionrG SystemExitKeyboardInterruptrdr{) r'rjrr*r;r+r5r6r0rr1rcontexts rrsz)BaseSelectorEventLoop._accept_connection2s  " 5''))H''))F # 44(Jv $E&*?)= 5?? !77(6!8##       !!!  -.     5 5 5{ 5N!$ '*2GJ'(+4GK(++G444444444 5 5 5 5 5 5 5s*AB"A,, B  BC**/C%%C*cf|}t|tsQ t|}n.#ttt f$rt d|dwxYw |j|}|std|d|dS#t$rYdSwxYw)NzInvalid file object: zFile descriptor z is used by transport ) isinstanceintrKAttributeError TypeError ValueErrorr& is_closingrDr)r'rrKrs r_ensure_fd_no_transportz-BaseSelectorEventLoop._ensure_fd_no_transports&#&& K KV]]__--"Iz: K K K !?!?!?@@dJ K &(0I'')) &"%r%% %%&&& & &    DD s!;+A&* B"" B0/B0c|tj|||d} |j|}|j|jc}\}}|j||tjz||f|| n8#t$r+|j |tj|dfYnwxYw|Sr-) _check_closedrHandler"rrXmodifyr EVENT_READcancelrregister r'rcallbackargshandlermaskreaderwriters rrSz!BaseSelectorEventLoop._add_readers xtT:: .((,,C &)Z "D"66 N ! !"dY-A&A#)6"2 4 4 4!  4 4 4 N # #B (<%+TN 4 4 4 4 4 4 B2CCct|rdS |j|}|j|jc}\}}|t jz}|s|j|n|j||d|f|| dSdS#t$rYdSwxYw)NFT) rEr"rrrXrr unregisterrrrr'rrrrrs rrIz$BaseSelectorEventLoop._remove_readers >>   5 .((,,C&)Z "D"66 Y)) )D @))"----%%b$v???! tu   55 B)) B76B7c|tj|||d} |j|}|j|jc}\}}|j||tjz||f|| n8#t$r+|j |tjd|fYnwxYw|Sr-) rrrr"rrXrr EVENT_WRITErrrrs r _add_writerz!BaseSelectorEventLoop._add_writer*s xtT:: .((,,C &)Z "D"66 N ! !"dY-B&B#)6"2 4 4 4!  4 4 4 N # #B (=%)6N 4 4 4 4 4 4 rct|rdS |j|}|j|jc}\}}|t jz}|s|j|n|j|||df|| dSdS#t$rYdSwxYw)Remove a writer callback.FNT) rEr"rrrXrrrrrrrs r_remove_writerz$BaseSelectorEventLoop._remove_writer:s >>   5 .((,,C&)Z "D"66 Y** *D @))"----%%b$???! tu   55 rcN|||j||g|RdS)zAdd a reader callback.N)rrSr'rrrs r add_readerz BaseSelectorEventLoop.add_readerQ9 $$R(((X-------r(cV||||S)zRemove a reader callback.)rrIr'rs r remove_readerz#BaseSelectorEventLoop.remove_readerV* $$R(((""2&&&r(cN|||j||g|RdS)zAdd a writer callback..N)rrrs r add_writerz BaseSelectorEventLoop.add_writer[rr(cV||||S)r)rrrs r remove_writerz#BaseSelectorEventLoop.remove_writer`rr(cKtj||jr'|dkrt d ||S#t tf$rYnwxYw|}| }| || ||j |||}| tj|j|||d{VS)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. rthe socket must be non-blockingrN)r_check_ssl_socketrd gettimeoutrr[r]r\rrKrrS _sock_recvadd_done_callback functoolspartial_sock_read_done)r'r/nfutrrs r sock_recvzBaseSelectorEventLoop.sock_recves %d+++ ; @4??,,11>?? ? 99Q<< !12    D   "" [[]] $$R(((!!"dosD!DD   d2Bv F F F H H HyyyyyyAA/.A/c`||s||dSdSr-) cancelledrr'rrrs rrz%BaseSelectorEventLoop._sock_read_done{8 >!1!1!3!3>   r " " " " " >r(c*|rdS ||}||dS#ttf$rYdSt t f$rt$r }||Yd}~dSd}~wwxYwr-) doner[ set_resultr]r\rrr set_exception)r'rr/rrXrs rrz BaseSelectorEventLoop._sock_recvs 88::  F !99Q<?? ? >>#&& &!12    D   "" [[]] $$R(((!!"d&:CsKK   d2Bv F F F H H Hyyyyyyrc*|rdS ||}||dS#ttf$rYdSt t f$rt$r }||Yd}~dSd}~wwxYwr-) rrrr]r\rrrr)r'rr/rnbytesrs rrz%BaseSelectorEventLoop._sock_recv_intos 88::  F #^^C((F NN6 " " " " " !12    FF-.     # # #   c " " " " " " " " " #rcKtj||jr'|dkrt d ||S#t tf$rYnwxYw|}| }| || ||j |||}| tj|j|||d{VS)aReceive 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. rrrN)rrrdrrrecvfromr]r\rrKrrS_sock_recvfromrrrr)r'r/bufsizerrrs r sock_recvfromz#BaseSelectorEventLoop.sock_recvfroms %d+++ ; @4??,,11>?? ? ==)) )!12    D   "" [[]] $$R(((!!"d&93gNN   d2Bv F F F H H Hyyyyyyrc*|rdS ||}||dS#ttf$rYdSt t f$rt$r }||Yd}~dSd}~wwxYwr-) rrrr]r\rrrr)r'rr/rresultrs rrz$BaseSelectorEventLoop._sock_recvfroms 88::  F #]]7++F NN6 " " " " " !12    FF-.     # # #   c " " " " " " " " " #rrc.Ktj||jr'|dkrt d|st |} |||S#ttf$rYnwxYw| }| }| || ||j ||||}|tj|j|||d{VS)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). rrrN)rrrdrrlen recvfrom_intor]r\rrKrrS_sock_recvfrom_intorrrr)r'r/rrrrrs rsock_recvfrom_intoz(BaseSelectorEventLoop.sock_recvfrom_intos7 %d+++ ; @4??,,11>?? ? XXF %%c622 2!12    D   "" [[]] $$R(((!!"d&>T3"(**   d2Bv F F F H H HyyyyyysA--BBc,|rdS |||}||dS#ttf$rYdSt t f$rt$r }||Yd}~dSd}~wwxYwr-) rrrr]r\rrrr)r'rr/rrrrs rrz)BaseSelectorEventLoop._sock_recvfrom_intos 88::  F #''W55F NN6 " " " " " !12    FF-.     # # #   c " " " " " " " " " #sABB3BBc VKtj||jr'|dkrt d ||}n#t tf$rd}YnwxYw|t|krdS| }| }| || ||j ||t||g}|t!j|j|||d{VS)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. rrNr)rrrdrrrbr]r\rrrKrr _sock_sendall memoryviewrrr_sock_write_done)r'r/rXrrrrs r sock_sendallz"BaseSelectorEventLoop.sock_sendallsC %d+++ ; @4??,,11>?? ?  $AA!12   AAA  D >> F  "" [[]] $$R(((!!"d&8#t",T"2"2QC99   d3R G G G I I IyyyyyysAA21A2c|rdS|d} |||d}nQ#ttf$rYdStt f$rt $r }||Yd}~dSd}~wwxYw||z }|t|kr| ddS||d<dSNr) rrbr]r\rrrrrr)r'rr/viewposstartrrs rrz#BaseSelectorEventLoop._sock_sendall&s 88::  FA  $uvv,''AA!12    FF-.          c " " " FFFFF    CII   NN4 CFFFs>B B ,BB c Ktj||jr'|dkrt d |||S#t tf$rYnwxYw|}| }| || ||j ||||}| tj|j|||d{VS)rrrrN)rrrdrrsendtor]r\rrKrr _sock_sendtorrrr)r'r/rXr@rrrs r sock_sendtoz!BaseSelectorEventLoop.sock_sendto<s$ %d+++ ; @4??,,11>?? ? ;;tW-- -!12    D   "" [[]] $$R(((!!"d&7dD")++   d3R G G G I I IyyyyyysAA0/A0c.|rdS ||d|}||dS#ttf$rYdSt t f$rt$r }||Yd}~dSd}~wwxYwr) rrrr]r\rrrr)r'rr/rXr@rrs rrz"BaseSelectorEventLoop._sock_sendtoWs 88::  F  D!W--A NN1      !12    FF-.     # # #   c " " " " " " " " " #sABB4BBcKtj||jr'|dkrt d|jt jks!tjrR|jt j kr=| ||j|j |j |d{V}|d\}}}}}| }|||| |d{V d}S#d}wxYw)zTConnect to a remote socket at address. This method is a coroutine. rr)familytypeprotoloopN)rrrdrrrrPAF_INET _HAS_IPv6AF_INET6_ensure_resolvedrrr _sock_connect)r'r/r@resolvedrrs r sock_connectz"BaseSelectorEventLoop.sock_connectfs& %d+++ ; @4??,,11>?? ? ;&. ( (% )*.+*H*H!22 $)4:3H#+1+ Aq!Q  "" 3g... 999999 CC$CJJJJs $C//C3c|} |||dn#ttf$re|||||j|||}|tj |j ||YnCB>B94C9B>>CC cKtj||jr'|dkrt d|}||||d{VS)aWAccept 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. rrN)rrrdrrr _sock_accept)r'r/rs r sock_acceptz!BaseSelectorEventLoop.sock_accepts %d+++ ; @4??,,11>?? ?  "" #t$$$yyyyyyr(c|} |\}}|d|||fdS#tt f$re|||||j||}| tj |j ||YdSttf$rt$r }||Yd}~dSd}~wwxYw)NFr)rKrrrRrr]r\rrSrrrrrrrrr)r'rr/rrr@rrs rrz"BaseSelectorEventLoop._sock_acceptsI [[]] , KKMMMD'   U # # # NND'? + + + + + !12 L L L  ( ( , , ,%%b$*;S$GGF  ! !!$"66JJJ L L L L L L-.     # # #   c " " " " " " " " " #s,AA2D D *DD cK|j|j=|}||d{V ||j|||dd{V ||r|||j|j<S#||r|||j|j<wxYw)NF)fallback) r&_sock_fd is_reading pause_reading_make_empty_waiter sock_sendfile_sock_reset_empty_waiterresume_reading)r'transpfileoffsetcountrs r_sendfile_nativez&BaseSelectorEventLoop._sendfile_natives1  V_ -**,,''))))))))) 7++FL$5:,<<<<<<<< <  & & ( ( ( (%%'''06D V_ - -  & & ( ( ( (%%'''06D V_ - 6 6 6 6s $B22;C-cF|D]\}}|j|jc}\}}|tjzr4|2|jr||n|||tjzr4|2|jr||||dSr-) fileobjrXrr _cancelledrI _add_callbackrr)r' event_listrrrrrs r_process_eventsz%BaseSelectorEventLoop._process_eventss# / /IC(+ SX %G%ffi** /v/A$/''0000&&v...i++ /0B$/''0000&&v... / /r(c||||dSr-)rIrKrG)r'r/s r _stop_servingz#BaseSelectorEventLoop._stop_servings/ DKKMM*** r(r-NNN)r)4r! __module__ __qualname____doc__rr2rSSL_HANDSHAKE_TIMEOUTSSL_SHUTDOWN_TIMEOUTr=rArGrFr#rYrTrfrlrirsrrSrIrrrrrrrrrrrrrrrrrrrrrrrr rrrr! __classcell__r s@rrr+s 9999997%)$77777 9=+ $t"+"A!*!? +++++$CGBBBB " " " " "   EEE      ,,,&#'tS-6-L,5,JFFFFD#"+"A!*!? ,),),),)`D"+"A!*!? )5)5)5)5V&&&$ * .... ''' ... ''' ,####!!! *###".###"2###">,6   2.####*   ,,," 7 7 7 / / /r(rceZdZdZeZdZdfd ZdZdZ dZ dZ dZ d Z ejfd Zdd Zd ZdZdZdZxZS)_SelectorTransportiNct||tj||jd< ||jd<n#t $r d|jd<YnwxYwd|jvr= ||jd<n#tj $r d|jd<YnwxYw||_ | |_ d|_ ||||_||_d|_d|_|j|j||j|j <dS)NrPsocknamernFr)rrr r|_extra getsocknamerc getpeernamerPerrorrrKr _protocol_connected set_protocol_server_buffer_factory_buffer _conn_lost_closing_attachr&)r'rr/r0r*r+r s rrz_SelectorTransport.__init__sh %%% & 6t < < H +&*&6&6&8&8DK # # + + +&*DK # # # + T[ ( ( /*.*:*:*<*< J''< / / /*. J''' /   #(  (### ++--  < # L " " "*.'''s$AA54A5BB;:B;c|jjg}|j|dn|jr|d|d|j|j|jst|jj |jtj }|r|dn|dt|jj |jtj }|rd}nd}| }|d|d |d d d |S) Nclosedclosingzfd=z read=pollingz read=idlepollingidlezwrite=z<{}> )r r!rappendr8r _looprErr"rrrget_write_buffer_sizeformatjoin)r'infor=staters r__repr__z_SelectorTransport.__repr__s]'( :  KK ! ! ! ! ] # KK " " " )$-))*** : !$**>*>*@*@ !*4:+?+/=):NPPG ) N++++ K(((*4:+?+/=+4+@BBG !0022G KK=%==7=== > > >}}SXXd^^,,,r(c0|ddSr-) _force_closerNs rabortz_SelectorTransport.abort2s $r(c"||_d|_dSNT) _protocolr2)r'r0s rr3z_SelectorTransport.set_protocol5s!#'   r(c|jSr-)rNrNs r get_protocolz_SelectorTransport.get_protocol9s ~r(c|jSr-)r8rNs rrz_SelectorTransport.is_closing<s }r(c|jrdSd|_|j|j|jsQ|xjdz c_|j|j|j|jddSdSNTr) r8rBrIr r6r7r call_soon_call_connection_lostrNs rrGz_SelectorTransport.close?s =  F  !!$-000| C OOq OO J % %dm 4 4 4 J !;T B B B B B C Cr(cv|j1|d|t||jdSdS)Nzunclosed transport )source)rResourceWarningrG)r'_warns r__del__z_SelectorTransport.__del__IsL : ! E000/$ O O O O J        " !r(Fatal error on transportct|tr2|jrt jd||dn$|j||||jd||dS)Nz%r: %sTr`)rorprr0) rrcrB get_debugr rr{rNrJ)r'rros r _fatal_errorz_SelectorTransport._fatal_errorNs c7 # # z##%% E XtWtDDDD J - -" ! N //    #r(cP|jrdS|jr8|j|j|j|js&d|_|j|j|xjdz c_|j|j |dSrS) r7r6clearrBrr r8rIrTrU)r'rs rrJz_SelectorTransport._force_close\s ?  F < 5 L   J % %dm 4 4 4} 5 DM J % %dm 4 4 4 1 T7=====r(c |jr|j||jd|_d|_d|_|j}||d|_dSdS#|jd|_d|_d|_|j}||d|_wxYwr-)r2rNconnection_lostrrGrBr4_detach)r'rr+s rrUz(_SelectorTransport._call_connection_losths $' 4..s333 J     DJ!DNDJ\F!   # "! J     DJ!DNDJ\F!   # ####s !A99AC c*t|jSr-)rr6rNs rrCz(_SelectorTransport.get_write_buffer_sizevs4<   r(c@|jrdS|jj||g|RdSr-)r8rBrSrs rrSz_SelectorTransport._add_readerys6 =  F r83d333333r()NN)r[)r!r#r$max_size bytearrayr5rrrHrKr3rPrrGwarningswarnrZr^rJrUrCrSr(r)s@rr+r+sHO E//////4---8   (((CCC%M     > > > $ $ $!!!4444444r(r+ceZdZdZejjZ dfd ZfdZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZdZfdZdZdZxZS)r.TNcd|_t|||||d|_d|_d|_t j|j|j |j j ||j |j |j|j|(|j t j|ddSdSr)_read_ready_cbrr_eof_paused _empty_waiterr _set_nodelayrrBrTrNconnection_maderSr  _read_readyr_set_result_unless_cancelled)r'rr/r0r1r*r+r s rrz!_SelectorSocketTransport.__init__s# tXuf===  !  ,,, T^;TBBB T-!]D,< > > >   J !E!' / / / / /  r(ct|tjr |j|_n |j|_t |dSr-)rr BufferedProtocol_read_ready__get_bufferrl_read_ready__data_receivedrr3)r'r0r s rr3z%_SelectorSocketTransport.set_protocolsP h : ; ; B"&">D  "&"AD  X&&&&&r(c"|j o|j Sr-)rnr8rNs rrz#_SelectorSocketTransport.is_readings<5 $55r(c|js|jrdSd|_|j|j|jrt jd|dSdS)NTz%r pauses reading)r8rnrBrIr r]r rrNs rrz&_SelectorSocketTransport.pause_readingsr = DL  F  !!$-000 :   ! ! 4 L,d 3 3 3 3 3 4 4r(c|js|jsdSd|_||j|j|jrtjd|dSdS)NFz%r resumes reading) r8rnrSr rrrBr]r rrNs rrz'_SelectorSocketTransport.resume_readingsu =    F  (8999 :   ! ! 5 L-t 4 4 4 4 4 5 5r(c.|dSr-)rlrNs rrrz$_SelectorSocketTransport._read_readys r(c|jrdS |jd}t|st dn?#t t f$rt$r!}||dYd}~dSd}~wwxYw |j |}nR#ttf$rYdSt t f$rt$r!}||dYd}~dSd}~wwxYw|s| dS |j|dS#t t f$rt$r!}||dYd}~dSd}~wwxYw)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.)r7rN get_bufferrrDrrrr^rrr]r\_read_ready__on_eofbuffer_updated)r'rrrs rrvz0_SelectorSocketTransport._read_ready__get_buffers ?  F .++B//Cs88 L"#JKKK L-.          F H H H FFFFF   Z))#..FF!12    FF-.          c#I J J J FFFFF    $ $ & & & F L N ) )& 1 1 1 1 1-.     L L L   J L L L L L L L L L LsM8ABA;;BBC.3C. C))C. D&&E"EE"c|jrdS |j|j}nR#tt f$rYdSt tf$rt$r!}| |dYd}~dSd}~wwxYw|s| dS |j |dS#t tf$rt$r!}| |dYd}~dSd}~wwxYw)Nr~z2Fatal error: protocol.data_received() call failed.) r7rr[rfr]r\rrrr^rrN data_received)r'rXrs rrwz3_SelectorSocketTransport._read_ready__data_receivedsp ?  F :??4=11DD!12    FF-.          c#I J J J FFFFF    $ $ & & & F K N ( ( . . . . .-.     K K K   I K K K K K K K K K Ks2+A:A:A55A:B22C. C))C.c|jrtjd| |j}n?#t tf$rt$r!}| |dYd}~dSd}~wwxYw|r!|j |j dS| dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rBr]r rrN eof_receivedrrrr^rIr rG)r' keep_openrs rrz,_SelectorSocketTransport._read_ready__on_eofs :   ! ! 2 L*D 1 1 1 3355II-.          H J J J FFFFF    J % %dm 4 4 4 4 4 JJLLLLLsA B%BBc t|tttfs$t dt |j|jrtd|j td|sdS|j r;|j tj krtjd|xj dz c_ dS|js |j|}||d}|sdSnQ#t$t&f$rYn>t(t*f$rt,$r!}||dYd}~dSd}~wwxYw|j|j|j|j||dS)N/data argument must be a bytes-like object, not z%Cannot call write() after write_eof()z(unable to write; sendfile is in progresssocket.send() raised exception.r%Fatal write error on socket transport)rbytesrgrrrr!rmrDror7r!LOG_THRESHOLD_FOR_CONNLOST_WRITESr warningr6rrbr]r\rrrr^rBrr  _write_readyextend_maybe_pause_protocol)r'rXrrs rwritez_SelectorSocketTransport.write s$ : >?? <;#'::#6;;<< < 9 HFGG G   )IJJ J  F ? )"MMM@AAA OOq OO F| E JOOD))ABBxF$%56    12       !!#'NOOO  J " "4=$2C D D D D!!! ""$$$$$sC**D8=D8D33D8cD|js Jd|jrdS |j|j}|r |jd|=||js|j|j|j|j d|j r| ddS|j r(|j tjdSdSdS#t t"f$rYdSt$t&f$rt($r}|j|j|j||d|j |j|Yd}~dSYd}~dSd}~wwxYw)NzData should not be emptyr)r6r7rrb_maybe_resume_protocolrBrr rorr8rUrmshutdownrPSHUT_WRr]r\rrrr`r^r)r'rrs rrz%_SelectorSocketTransport._write_ready4s|777777 ?  F 8  --A %L!$  ' ' ) ) )< 8 ))$-888%1&11$777=8..t44444Y8J''77777 8 8 88) !12    DD-.     6 6 6 J % %dm 4 4 4 L     c#J K K K!-"00555555555.-----  6sC11FFA/FFc|js|jrdSd|_|js&|jt jdSdSrM)r8rmr6rrrPrrNs r write_eofz"_SelectorSocketTransport.write_eofRsS = DI  F | 0 J   / / / / / 0 0r(cdSrMrVrNs r can_write_eofz&_SelectorSocketTransport.can_write_eofYstr(ct||j)|jt ddSdS)NzConnection is closed by peer)rrUrorConnectionError)r'rr s rrUz._SelectorSocketTransport._call_connection_lost\sb %%c***   )   , , >?? A A A A A * )r(c|jtd|j|_|js|jd|jS)NzEmpty waiter is already set)rorDrBrr6rrNs rrz+_SelectorSocketTransport._make_empty_waiterbsZ   )<== =!Z5577| 0   ) )$ / / /!!r(cd|_dSr-)rorNs rrz,_SelectorSocketTransport._reset_empty_waiterjs!r(r")r!r#r$_start_tls_compatibler _SendfileMode TRY_NATIVE_sendfile_compatiblerr3rrrrrrvrwrrrrrrUrrr(r)s@rr.r.sW $2=48$(//////.'''''666444555#L#L#LJKKK2*%%%%%%N888<000AAAAA """"""""""r(r.cLeZdZejZ dfd ZdZdZddZ dZ xZ S) r?Nc`t||||||_d|_|j|jj||j|j|j |j |(|jtj |ddSdSr) rr_address _buffer_sizerBrTrNrqrSr rrrrs)r'rr/r0r@r1r*r s rrz#_SelectorDatagramTransport.__init__rs tXu555  T^;TBBB T-!]D,< > > >   J !E!' / / / / /  r(c|jSr-)rrNs rrCz0_SelectorDatagramTransport.get_write_buffer_sizes   r(c|jrdS |j|j\}}|j||dS#t tf$rYdSt$r%}|j |Yd}~dSd}~wttf$rt$r!}| |dYd}~dSd}~wwxYw)Nz&Fatal read error on datagram transport)r7rrrfrNdatagram_receivedr]r\rcerror_receivedrrrr^r'rXrrs rrrz&_SelectorDatagramTransport._read_readys ?  F 9,,T];;JD$ N , ,T4 8 8 8 8 8 !12    DD / / / N ) )# . . . . . . . . .-.     M M M   c#K L L L L L L L L L Ms)"A C C'BC%CCc t|tttfs$t dt |j|sdS|jr)|d|jfvrtd|j|j}|j rB|jr;|j tj krtj d|xj dz c_ dS|js |jdr|j|n|j||dS#t&t(f$r(|j|j|jYnkt2$r%}|j|Yd}~dSd}~wt8t:f$rt<$r!}||dYd}~dSd}~wwxYw|j t||f|xj!tE|z c_!|#dS)Nrz!Invalid address: must be None or rrrn'Fatal write error on datagram transport)$rrrgrrrr!rrr7rrr rr6r.rrbrr]r\rBrr  _sendto_readyrcrNrrrrr^rArrrrs rrz!_SelectorDatagramTransport.sendtosi$ : >?? <;#'::#6;;<< <  F = !D$-000 G GGIII=D ? t} )"MMM@AAA OOq OO F|  ;z*2JOOD))))J%%dD111#%56 J J J &&t}d6HIIIII   --c222 12       !!BDDD  U4[[$/000 SYY& ""$$$$$s+ AD6F1 F1E22F1F,,F1cD|jr=|j\}}|xjt|zc_ |jdr|j|n|j||n#ttf$r<|j ||f|xjt|z c_Ynst$r%}|j |Yd}~dSd}~wttf$rt $r!}||dYd}~dSd}~wwxYw|j=||js=|j|j|jr|ddSdSdS)Nrnr)r6popleftrrr.rrbrr]r\ appendleftrcrNrrrrr^rrBrr r8rUrs rrz(_SelectorDatagramTransport._sendto_readysl --//JD$   T *   ;z*2JOOD))))J%%dD111#%56    ''t 555!!SYY.!!   --c222 12       !!BDDD #l , ##%%%| 1 J % %dm 4 4 4} 1**400000 1 1 1 1s,ABA D; D;C<<D;D66D;r"r-) r!r#r$ collectionsdequer5rrCrrrrr(r)s@rr?r?ns!'O59$( / / / / / /!!!999 *%*%*%*%X1111111r(r?)r%__all__rrvrrrPrhr$ssl ImportErrorrrrrr r r r logr r BaseEventLoopr_FlowControlMixin Transportr+r.r?rVr(rrs* #  JJJJ CCC(((B B B B B K5B B B JM4M4M4M4M45#-M4M4M4`k"k"k"k"k"1k"k"k"\l1l1l1l1l1!3l1l1l1l1l1s '11