\dbndZdZddlZddlZddlZddlZddlZddlZddlZ 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 (..\python\lib\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 d Zd Zd Zejfd ZddZdZdZdZdZxZS)_SelectorTransportiNct||tj||jd< ||jd<n#t $r d|jd<YnwxYwd|jvr= ||jd<n#tj $r d|jd<YnwxYw||_ | |_ d|_ ||||_||_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_paused_attachr&)r'rr/r0r*r+r s rrz_SelectorTransport.__init__so %%% & 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.abort4s $r(c"||_d|_dSNT) _protocolr2)r'r0s rr3z_SelectorTransport.set_protocol7s!#'   r(c|jSr-)rOrNs r get_protocolz_SelectorTransport.get_protocol;s ~r(c|jSr-)r8rNs rrz_SelectorTransport.is_closing>s }r(c<| o|j Sr-)rr9rNs rrz_SelectorTransport.is_readingAs??$$$9T\)99r(c|sdSd|_|j|j|jrt jd|dSdS)NTz%r pauses reading)rr9rCrIr  get_debugr rrNs rrz _SelectorTransport.pause_readingDsq    F  !!$-000 :   ! ! 4 L,d 3 3 3 3 3 4 4r(c|js|jsdSd|_||j|j|jrtjd|dSdS)NFz%r resumes reading) r8r9rSr  _read_readyrCrUr rrNs rrz!_SelectorTransport.resume_readingLsu =    F  (8999 :   ! ! 5 L-t 4 4 4 4 4 5 5r(c|jrdSd|_|j|j|jsQ|xjdz c_|j|j|j|jddSdSNTr) r8rCrIr r6r7r call_soon_call_connection_lostrNs rrGz_SelectorTransport.closeTs =  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__^sL : ! E000/$ O O O O J        " !r(Fatal error on transportct|tr2|jrt jd||dn$|j||||jd||dS)Nz%r: %sTr`)rorprr0) rrcrCrUr rr{rOrK)r'rros r _fatal_errorz_SelectorTransport._fatal_errorcs c7 # # z##%% E XtWtDDDD J - -" ! N //    #r(cP|jrdS|jr8|j|j|j|js&d|_|j|j|xjdz c_|j|j |dSrY) r7r6clearrCrr r8rIrZr[)r'rs rrKz_SelectorTransport._force_closeqs ?  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-)r2rOconnection_lostrrGrCr4_detach)r'rr+s rr[z(_SelectorTransport._call_connection_lost}s $' 4..s333 J     DJ!DNDJ\F!   # "! J     DJ!DNDJ\F!   # ####s !A99AC c*t|jSr-)rr6rNs rrDz(_SelectorTransport.get_write_buffer_sizes4<   r(cZ|sdS|jj||g|RdSr-)rrCrSrs rrSz_SelectorTransport._add_readers>    F r83d333333r()NN)ra)r!r#r$max_size bytearrayr5rrrIrLr3rQrrrrrGwarningswarnr`rcrKr[rDrSr(r)s@rr+r+sEHO E//////8---8   (((:::444555CCC%M     > > > $ $ $!!!4444444r(r+ceZdZdZejjZ dfd ZfdZ dZ dZ dZ dZ d Zd Zd Zd Zfd ZdZdZxZS)r.TNcd|_t|||||d|_d|_t j|j|j |j j ||j |j |j |j|(|j tj|ddSdSr)_read_ready_cbrr_eof _empty_waiterr _set_nodelayrrCrZrOconnection_maderSr rWr_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_bufferrq_read_ready__data_receivedrr3)r'r0r s rr3z%_SelectorSocketTransport.set_protocolsP h : ; ; B"&">D  "&"AD  X&&&&&r(c.|dSr-)rqrNs rrWz$_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.)r7rO get_bufferrrDrrrrcrrr]r\_read_ready__on_eofbuffer_updated)r'rrrs rryz0_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[rkr]r\rrrrcrrO data_received)r'rXrs rrzz3_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.) rCrUr rrO eof_receivedrrrrcrIr 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)rbytesrlrrrr!rrrDrsr7r!LOG_THRESHOLD_FOR_CONNLOST_WRITESr warningr6rrbr]r\rrrrcrCrr  _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_protocolrCrr rsrr8r[rrshutdownrPSHUT_WRr]r\rrrrercr)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 jdSdSrN)r8rrr6rrrPrrNs r write_eofz"_SelectorSocketTransport.write_eofRsS = DI  F | 0 J   / / / / / 0 0r(cdSrNrVrNs r can_write_eofz&_SelectorSocketTransport.can_write_eofYstr(ct||j)|jt ddSdS)NzConnection is closed by peer)rr[rsrConnectionError)r'rr s rr[z._SelectorSocketTransport._call_connection_lost\sb %%c***   )   , , >?? A A A A A * )r(c|jtd|j|_|js|jd|jS)NzEmpty waiter is already set)rsrDrCrr6rrNs rrz+_SelectorSocketTransport._make_empty_waiterbsZ   )<== =!Z5577| 0   ) )$ / / /!!r(cd|_dSr-)rsrNs rrz,_SelectorSocketTransport._reset_empty_waiterjs!r(r")r!r#r$_start_tls_compatibler _SendfileMode TRY_NATIVE_sendfile_compatiblerr3rWryrzrrrrrr[rrr(r)s@rr.r.s* $2=48$(//////,'''''#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_sizerCrZrOrurSr rWrrv)r'rr/r0r@r1r*r s rrz#_SelectorDatagramTransport.__init__rs tXu555  T^;TBBB T-!]D,< > > >   J !E!' / / / / /  r(c|jSr-)rrNs rrDz0_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)r7rrrkrOdatagram_receivedr]r\rcerror_receivedrrrrcr'rXrrs rrWz&_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)$rrrlrrrr!rrr7rrr rr6r.rrbrr]r\rCrr  _sendto_readyrcrOrrrrrcrBrrrrs 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\ appendleftrcrOrrrrrcrrCrr r8r[rs 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$ collectionsdequer5rrDrWrrr(r)s@rr?r?ns!'O59$( / / / / / /!!!999 *%*%*%*%X1111111r(r?)r%__all__rrvrrrPrmr$ssl ImportErrorrrrrr r r r logr r BaseEventLoopr_FlowControlMixin Transportr+r.r?rVr(rrs* #  JJJJ CCC(((B B B B B K5B B B Ja4a4a4a4a45#-a4a4a4HW"W"W"W"W"1W"W"W"tl1l1l1l1l1!3l1l1l1l1l1s '11