RhidZdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z dd l mZdd l mZdd l mZdd l mZdd lmZdZGddej*ej,ZGddeej0ZGddeej4ZGddeZGddeej:ZGddeeej>Z Gddeeej>Z!Gdde jDZ#y)zEvent loop using a proactor and related classes. A proactor is a "notify-on-completion" multiplexer. Currently a proactor is only implemented on Windows with IOCP. )BaseProactorEventLoopN) base_events) constants)futures) exceptions) protocols)sslproto) transports)trsock)loggerctj||jd< |j|jd<d|jvr |j|jd<yy#tj $r5|j jrtjd|dYuwxYw#tj $rd|jd<YywxYw)Nsocketsocknamezgetsockname() failed on %rTexc_infopeername) r TransportSocket_extra getsocknamererror_loop get_debugr warning getpeername) transportsocks ./usr/lib/python3.12/asyncio/proactor_events.py_set_socket_extrars!'!7!7!=IXC'+'7'7'9 $ ))) 0+/+;+;+=I  Z (* <<C ?? $ $ & NN,dT CC|| 0+/I  Z ( 0s$A/B:/AB76B7:"CCceZdZdZ dfd ZdZdZdZdZdZ dZ e jfd Z dd Zd Zd Zd ZxZS)_ProactorBasePipeTransportz*Base class for pipe and socket transports.ct||||j|||_|j |||_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ |j |j j|jj!|j"j$||,|jj!t&j(|dyy)NrF)super__init__ _set_extra_sock set_protocol_server_buffer _read_fut _write_fut_pending_write _conn_lost_closing_called_connection_lost _eof_written_attachr call_soon _protocolconnection_mader_set_result_unless_cancelledselflooprprotocolwaiterextraserver __class__s rr$z#_ProactorBasePipeTransport.__init__2s %   (#   ',$! << # LL " T^^;;TB   JJ !E!E!' / c|jjg}|j|jdn|jr|jd|j,|jd|jj |j |jd|j |j|jd|j|jr'|jdt|j|jr|jddjd j|S) Nclosedclosingzfd=zread=zwrite=zwrite_bufsize=z EOF writtenz<{}> ) r=__name__r&appendr.filenor*r+r)lenr0formatjoin)r7infos r__repr__z#_ProactorBasePipeTransport.__repr__Is''( ::  KK ! ]] KK " :: ! KK#djj//123 4 >> % KK%12 3 ?? & KK& 34 5 << KK.T\\):(;< =    KK &}}SXXd^,,r>c"||jd<y)Npipe)rr7rs rr%z%_ProactorBasePipeTransport._set_extra[s" Fr>c||_yNr3)r7r9s rr'z'_ProactorBasePipeTransport.set_protocol^s !r>c|jSrOrPr7s r get_protocolz'_ProactorBasePipeTransport.get_protocolas ~~r>c|jSrO)r.rRs r is_closingz%_ProactorBasePipeTransport.is_closingds }}r>c.|jryd|_|xjdz c_|js2|j&|jj |j d|j"|jjd|_yy)NTr) r.r-r)r+rr2_call_connection_lostr*cancelrRs rclosez _ProactorBasePipeTransport.closegsq ==   1|| 7 JJ !;!;T B >> % NN ! ! #!DN &r>cv|j-|d|t||jjyy)Nzunclosed transport )source)r&ResourceWarningrY)r7_warns r__del__z"_ProactorBasePipeTransport.__del__rs5 :: ! 'x0/$ O JJ    "r>c0 t|tr4|jjrDt j d||dn*|jj ||||jd|j|y#|j|wxYw)Nz%r: %sTr)message exceptionrr9) isinstanceOSErrorrrr debugcall_exception_handlerr3 _force_close)r7excr`s r _fatal_errorz'_ProactorBasePipeTransport._fatal_errorwsy ##w'::'')LL44H 11&!$!% $ 3   c "D  c "s A.BBcH|jS|jjs9||jjdn|jj||jr |j ryd|_|xj dz c_|jr!|jjd|_|jr!|jjd|_ d|_ d|_ |jj|j|y)NTrr) _empty_waiterdone set_result set_exceptionr.r/r-r+rXr*r,r)rr2rW)r7rgs rrfz'_ProactorBasePipeTransport._force_closes    )$2D2D2I2I2K{""--d3""005 ==T99   1 ?? OO " " $"DO >> NN ! ! #!DN  T77=r>c|jry |jj|t|jdrF|jj dk7r)|jj tj|jjd|_|j}||jd|_ d|_y#t|jdrF|jj dk7r)|jj tj|jjd|_|j}||jd|_ d|_wxYw)NshutdownT) r/r3connection_losthasattrr&rEror SHUT_RDWRrYr(_detach)r7rgr<s rrWz0_ProactorBasePipeTransport._call_connection_losts  ' '  0 NN * *3 / tzz:.4::3D3D3F"3L ##F$4$45 JJ   DJ\\F! # +/D (tzz:.4::3D3D3F"3L ##F$4$45 JJ   DJ\\F! # +/D (s CB+E?cf|j}|j|t|jz }|SrO)r,r)rF)r7sizes rget_write_buffer_sizez0_ProactorBasePipeTransport.get_write_buffer_sizes/"" << # C % %D r>NNN)zFatal error on pipe transport)rC __module__ __qualname____doc__r$rJr%r'rSrUrYwarningswarnr^rhrfrWrw __classcell__r=s@rr!r!.sQ448$(/.-$#" "%MM #>(0(r>r!cNeZdZdZ d fd ZdZdZdZdZdZ d dZ xZ S) _ProactorReadPipeTransportzTransport for read pipes.cd|_d|_t| ||||||t ||_|j j|jd|_y)NrpTF) _pending_data_length_pausedr#r$ bytearray_datarr2 _loop_reading) r7r8rr9r:r;r< buffer_sizer=s rr$z#_ProactorReadPipeTransport.__init__sT$&!  tXvufE{+  T//0 r>c:|j xr |j SrO)rr.rRs r is_readingz%_ProactorReadPipeTransport.is_readings<<5 $55r>c|js |jryd|_|jjrt j d|yy)NTz%r pauses reading)r.rrrr rdrRs r pause_readingz(_ProactorReadPipeTransport.pause_readings? ==DLL   ::   ! LL,d 3 "r>c|js |jsyd|_|j&|jj |j d|j }d|_|dkDr4|jj |j|jd|||jjrtjd|yy)NFrpz%r resumes reading) r.rr*rr2rr_data_receivedrrr rd)r7lengths rresume_readingz)_ProactorReadPipeTransport.resume_readings ==  >> ! JJ !3!3T :**$&! B; JJ !4!4djj&6I6 R ::   ! LL-t 4 "r>c.|jjrtjd| |jj }|s|jyy#t tf$rt$r}|j|dYd}~yd}~wwxYw)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rrr rdr3 eof_received SystemExitKeyboardInterrupt BaseExceptionrhrY)r7 keep_openrgs r _eof_receivedz(_ProactorReadPipeTransport._eof_receiveds ::   ! LL*D 1 335I JJL-.      H J  sA B8BBc|jr|jdk(sJ||_y|dk(r|jyt|jt j r" t j|j|y|jj|y#ttf$rt$r}|j|dYd}~yd}~wwxYw)Nrprz3Fatal error: protocol.buffer_updated() call failed.) rrrrbr3r BufferedProtocol_feed_data_to_buffered_protorrrrh data_received)r7datarrgs rrz)_ProactorReadPipeTransport._data_receiveds <<,,2 22(.D %  Q;     dnni&@&@ A 66t~~tL NN ( ( . 12   !!##12  s! BC6C  Ccd}d} ||j|us|j |jsJd|_|jrQ|j}|dk(r |dkDr|j ||yyt t |jd|}n|j|jr |dkDr|j ||yy|js?|jjj|j|j|_|js&|jj|j |dkDr|j ||yy#t $rZ}|js|j#|dn1|jj%rt'j(ddYd}~wd}~wt*$r}|j-|Yd}~d}~wt.$r}|j#|dYd}~d}~wt0j2$r|jsYwxYw#|dkDr|j ||wwxYw)Nrprz"Fatal read error on pipe transportz*Read error on pipe transport while closingTr)r*r.rkresultrbytes memoryviewrrXrr _proactor recv_intor&add_done_callbackrConnectionAbortedErrorrhrr rdConnectionResetErrorrfrcrCancelledError)r7futrrrgs rrz(_ProactorReadPipeTransport._loop_readings. 2~~,1G15@@!%88: ZZ\F{F{##D&1A!DJJ!7!@ADJJL}}2{##D&1)<E$A E$2H0$ H--AG=H0 H-G$H0$ H-0HH0#H-*H0,H--H00I )NNNirO) rCryrzr{r$rrrrrrr~rs@rrrs/#486;64&5$ /212r>rcReZdZdZdZfdZdZd dZdZdZ dZ d Z d Z xZ S) _ProactorBaseWritePipeTransportzTransport for write pipes.Tc2t||i|d|_yrO)r#r$rjr7argskwr=s rr$z(_ProactorBaseWritePipeTransport.__init__Ns $%"%!r>ct|tttfs!t dt |j |jr td|j td|sy|jrH|jtjk\rtjd|xjdz c_ y|j*|j J|j#t|y|j s!t||_|j%y|j j'||j%y)Nz/data argument must be a bytes-like object, not zwrite_eof() already calledz(unable to write; sendfile is in progresszsocket.send() raised exception.r)r)rbrrr TypeErrortyperCr0 RuntimeErrorrjr-r!LOG_THRESHOLD_FOR_CONNLOST_WRITESr rr+r) _loop_writing_maybe_pause_protocolextend)r7rs rwritez%_ProactorBaseWritePipeTransport.writeRs$ : >?Dz**+-. .   ;< <    )IJ J  ??)"M"MM@A OOq O  ?? "<<' ''   E$K  0$T?DL  & & ( LL   %  & & (r>cN ||j |jry||jusJd|_d|_|r|j||j}d|_|sx|jr&|j j |jd|jr)|jjtj|jn|j jj|j||_|jj!sW|jdk(sJt#||_|jj%|j&|j)n%|jj%|j&|j*)|j|j*j-dyyy#t.$r}|j1|Yd}~yd}~wt2$r}|j5|dYd}~yd}~wwxYw)Nrz#Fatal write error on pipe transport)r+r.r,rr)rr2rWr0r&rorSHUT_WR_maybe_resume_protocolrsendrkrFrrrrjrlrrfrcrh)r7frrgs rrz-_ProactorBaseWritePipeTransport._loop_writingxs& J}!8T]]' ''"DO"#D  |||# ==JJ(()C)CTJ$$JJ''7 ++-"&**"6"6";";DJJ"M++-..!333*-d)D'OO55d6H6HI..0OO55d6H6HI!!-$//2I""--d33J-# #   c " " J   c#H I I Js)GF=G H$&G<< H$HH$cyNTrRs r can_write_eofz-_ProactorBaseWritePipeTransport.can_write_eofr>c$|jyrO)rYrRs r write_eofz)_ProactorBaseWritePipeTransport.write_eofs  r>c&|jdyrOrfrRs rabortz%_ProactorBaseWritePipeTransport.abort $r>c|j td|jj|_|j|jj d|jS)NzEmpty waiter is already set)rjrr create_futurer+rlrRs r_make_empty_waiterz2_ProactorBaseWritePipeTransport._make_empty_waitersY    )<= =!ZZ557 ?? "    ) )$ /!!!r>cd|_yrO)rjrRs r_reset_empty_waiterz3_ProactorBaseWritePipeTransport._reset_empty_waiters !r>NN)rCryrzr{_start_tls_compatibler$rrrrrrrr~rs@rrrHs7$ "$)L'JR ""r>rc$eZdZfdZdZxZS)_ProactorWritePipeTransportct||i||jjj |j d|_|j j|jy)N) r#r$rrrecvr&r*r _pipe_closedrs rr$z$_ProactorWritePipeTransport.__init__sO $%"%--224::rB (():):;r>cB|jry|jdk(sJ|jr|jJy||jusJ||jfd|_|j|j t y|jy)Nr>) cancelledrr.r*r+rfBrokenPipeErrorrY)r7rs rrz(_ProactorWritePipeTransport._pipe_closeds ==? zz|s""" ==>>) )) dnn$;sDNN&;;$ ?? &   o/ 0 JJLr>)rCryrzr$rr~rs@rrrs < r>rcReZdZdZ d fd ZdZdZdZd dZd dZ d dZ xZ S) _ProactorDatagramTransportic||_d|_d|_t||||||t j |_|jj|jy)Nr)r:r;) _addressrj _buffer_sizer#r$ collectionsdequer)rr2r)r7r8rr9addressr:r;r=s rr$z#_ProactorDatagramTransport.__init__s^ ! tXfEJ#((*  T//0r>ct||yrOrrMs rr%z%_ProactorDatagramTransport._set_extra $%r>c|jSrO)rrRs rrwz0_ProactorDatagramTransport.get_write_buffer_sizes   r>c&|jdyrOrrRs rrz _ProactorDatagramTransport.abortrr>crt|tttfst dt ||sy|j (|d|j fvrtd|j |jrT|j rH|jtjk\rtjd|xjdz c_y|jjt||f|xjt!|z c_|j"|j%|j'y)Nz,data argument must be bytes-like object (%r)z!Invalid address: must be None or z!socket.sendto() raised exception.r)rbrrrrrr ValueErrorr-rrr rr)rDrrFr+rr)r7raddrs rsendtoz!_ProactorDatagramTransport.sendtos$ : >?J J( (  == $dDMM5J)J3DMM?CE E ??t}})"M"MMBC OOq O  U4[$/0 SY& ?? "     ""$r>c |jry||jusJd|_|r|j|jr|jr?|jr3|j r&|j j|jdy|jj\}}|xjt|zc_ |j6|j jj|j||_n7|j jj|j|||_|jj!|j"|j%y#t&$r%}|j(j+|Yd}~yd}~wt,$r}|j/|dYd}~yd}~wwxYw)N)rz'Fatal write error on datagram transport)r-r+rr)rr.rr2rWpopleftrrFrrr&rrrrrcr3error_received Exceptionrh)r7rrrrgs rrz(_ProactorDatagramTransport._loop_writingsd *$//) ))"DO <>S(T^^-C-1]] <<"DNjjl==D000t<-==,!$dmm$D!$JD$ 00t<}}(!%!5!5!:!:4::;?=="J"&!5!5!>!>tzz?C}}"N~~)001C1CD00t< / NN ) )# . .(( ==! 00t<sN G AG !,G .B G 92H HG4/H4#HHHH!H>rxrO) rCryrzrr$r%rwrrrrr~rs@rrrs2H59$( 1&! %: *D)=r>rceZdZdZdZdZy)_ProactorDuplexPipeTransportzTransport for duplex pipes.cy)NFrrRs rrz*_ProactorDuplexPipeTransport.can_write_eofUsr>ctrO)NotImplementedErrorrRs rrz&_ProactorDuplexPipeTransport.write_eofXs!!r>N)rCryrzr{rrrr>rrrPs&"r>rcfeZdZdZej j Z dfd ZdZ dZ dZ xZ S)_ProactorSocketTransportz Transport for connected sockets.cXt|||||||tj|yrO)r#r$r _set_nodelayr6s rr$z!_ProactorSocketTransport.__init__cs( tXvufE  &r>ct||yrOrrMs rr%z#_ProactorSocketTransport._set_extrahrr>cyrrrRs rrz&_ProactorSocketTransport.can_write_eofkrr>c|js |jryd|_|j*|jj t j yyr)r.r0r+r&rorrrRs rrz"_ProactorSocketTransport.write_eofnsA ==D--   ?? " JJ   / #r>rx) rCryrzr{r _SendfileMode TRY_NATIVE_sendfile_compatibler$r%rrr~rs@rrr\s4+$22==48$(' &0r>rceZdZfdZ ddZ dddddddddZ ddZ d dZ d d Z d d Z fd Z d Z d Z dZ d!dZdZdZdZdZdZdZdZdZddZdZ d"dZdZdZdZxZS)#rct|tjd|jj ||_||_d|_i|_ |j||jtjtjur.tj |j"j%yy)NzUsing proactor: %s)r#r$r rdr=rCr _selector_self_reading_future_accept_futuresset_loop_make_self_pipe threadingcurrent_thread main_threadsignal set_wakeup_fd_csockrE)r7proactorr=s rr$zBaseProactorEventLoop.__init__xs  )8+=+=+F+FG!!$(!!$   # # %)>)>)@ @  !3!3!5 6 Ar>Nc"t||||||SrO)r)r7rr9r:r;r<s r_make_socket_transportz,BaseProactorEventLoop._make_socket_transports'dHf(-v7 7r>F) server_sideserver_hostnamer;r<ssl_handshake_timeoutssl_shutdown_timeoutc ttj||||||| | } t||| ||| jS)N)rrr;r<)r SSLProtocolr_app_transport) r7rawsockr9 sslcontextr:rrr;r<rr ssl_protocols r_make_ssl_transportz)BaseProactorEventLoop._make_ssl_transportsI  ++h F_&;%9 ; !w ',V =***r>c"t||||||SrO)r)r7rr9rr:r;s r_make_datagram_transportz.BaseProactorEventLoop._make_datagram_transports)$h*0%9 9r>c t|||||SrO)rr7rr9r:r;s r_make_duplex_pipe_transportz1BaseProactorEventLoop._make_duplex_pipe_transports+D,0(FEK Kr>c t|||||SrO)rrs r_make_read_pipe_transportz/BaseProactorEventLoop._make_read_pipe_transports)$hNNr>c t|||||SrO)rrs r_make_write_pipe_transportz0BaseProactorEventLoop._make_write_pipe_transports+4+/65J Jr>c|jr td|jrytjtj urt jd|j|j|jjd|_ d|_ t|-y)Nz!Cannot close a running event looprp) is_runningr is_closedrrr r r _stop_accept_futures_close_self_piperrYrr#)r7r=s rrYzBaseProactorEventLoop.closes ?? BC C >>    # # %)>)>)@ @   $ !!#    r>cVK|jj||d{S7wrO)rr)r7rns r sock_recvzBaseProactorEventLoop.sock_recvs#^^((q1111 )')cVK|jj||d{S7wrO)rr)r7rbufs rsock_recv_intoz$BaseProactorEventLoop.sock_recv_intos#^^--dC8888r-cVK|jj||d{S7wrO)rr)r7rbufsizes r sock_recvfromz#BaseProactorEventLoop.sock_recvfroms#^^,,T7;;;;r-crK|s t|}|jj|||d{S7wrO)rFr recvfrom_into)r7rr/nbytess rsock_recvfrom_intoz(BaseProactorEventLoop.sock_recvfrom_intos1XF^^11$VDDDDs .757cVK|jj||d{S7wrO)rr)r7rrs r sock_sendallz"BaseProactorEventLoop.sock_sendalls#^^((t4444r-cZK|jj||d|d{S7w)Nr)rr)r7rrrs r sock_sendtoz!BaseProactorEventLoop.sock_sendtos'^^**4q'BBBBs "+)+cVK|jj||d{S7wrO)rconnect)r7rrs r sock_connectz"BaseProactorEventLoop.sock_connects#^^++D'::::r-cTK|jj|d{S7wrO)racceptrMs r sock_acceptz!BaseProactorEventLoop.sock_accepts!^^**40000s (&(cK |j} t j|j}|r|n|}|syt|d}|rt||z|n|} t||}d} t| |z |}|dkr| | dkDr|j|SS|jj||||d{||z }| |z } ^#ttjf$r}t j dd}~wwxYw#t$rt j dwxYw7g#| dkDr|j|wwxYww)Nznot a regular filerl)rEAttributeErrorioUnsupportedOperationrSendfileNotAvailableErrorosfstatst_sizercminseekrsendfile) r7rfileoffsetcountrEerrfsize blocksizeend_pos total_sents r_sock_sendfile_nativez+BaseProactorEventLoop._sock_sendfile_natives_ M[[]F MHHV$,,E#E  ;/ 05#fune,5VU#  "& 0)< >% A~ &! nn--dD&)LLL)#i'  7 78 M667KL L M M667KL L MMA~ &!shEC D6E+D$E!D$:D";D$ C=#C88C==EDE"D$$D==EcjK|j}|j|jd{ |j|j|||dd{|j |r|j SS7P7)#|j |r|j wwxYww)NF)fallback)rrr sock_sendfiler&rr)r7transprMrNrOrs r_sendfile_nativez&BaseProactorEventLoop._sendfile_natives**,''))) (++FLL$5:,<<  & & (%%' *<  & & (%%'s84B3BB3#B B  B #%B3 B %B00B3c |j!|jjd|_|jjd|_|jjd|_|xj dzc_y)Nr)rrX_ssockrYr  _internal_fdsrRs rr)z&BaseProactorEventLoop._close_self_pipesg  $ $ 0  % % , , .(,D %     ar>ctj\|_|_|jj d|jj d|xj dz c_y)NFr)r socketpairr\r  setblockingr]rRs rrz%BaseProactorEventLoop._make_self_pipesN#)#4#4#6  T[ & & ar>ct ||j|j|ury|jj|jd}||_|j |j y#tj$rYyttf$rt$r}|jd||dYd}~yd}~wwxYw)Niz.Error on reading from the event loop self pipe)r`rar8) rrrrr\r_loop_self_readingrrrrrre)r7rrgs rrbz(BaseProactorEventLoop._loop_self_readings 9} ((1##DKK6A)*D %   7 7 8((  -.     ' 'K )   s" A,&A,,B7B7B22B7c|j}|y |jdy#t$r(|jrt j ddYyYywxYw)Nz3Fail to write a null byte into the self-pipe socketTr)r rrc_debugr rd)r7csocks r_write_to_selfz$BaseProactorEventLoop._write_to_self2sU   =  , JJu  ,{{ 0&*, ,s#,AAc Pdfd jy)Nc  |s|j\}}jrtjd||} j || dd|i nj ||d|ij ryjj }|j j<|jy#t$r} jdk7r9jd|tj d j!n.jrtjd d Yd}~yYd}~yYd}~yd}~wt"j$$r j!YywxYw) Nz#%r got a new connection from %r: %rTr)rr;r<rrrrpzAccept failed on a socket)r`rarzAccept failed on socket %rr)rrer rdrrr'rr@rrErrcrer rrYrr) rconnrr9rgr8protocol_factoryr7r<rrrrs rr8z2BaseProactorEventLoop._start_serving..loopIsw# *=!"JD${{ %J%+T49/1H!-00 (JD#-t"4V2G1E 1G 33 (#-t"4V4E>>#NN))$/78$$T[[]3##D) 6;;=B&//#>%("("8"8">1 JJL[[LL!=!%66!!,,   s%BC C FA0E&FFrO)r2) r7rkrrr<backlogrrr8s ````` ``@r_start_servingz$BaseProactorEventLoop._start_servingDs $ *$ *L tr>cyrOr)r7 event_lists r_process_eventsz%BaseProactorEventLoop._process_eventsqs r>c|jjD]}|j|jjyrO)rvaluesrXclear)r7futures rr(z*BaseProactorEventLoop._stop_accept_futuresus;**113 F MMO  ""$r>c|jj|jd}|r|j|jj ||j yrO)rpoprErXr _stop_servingrY)r7rrts rrwz#BaseProactorEventLoop._stop_servingzsG%%))$++->  MMO $$T* r>rxrOr)r)NNdNN)rCryrzr$rrrr r"r$rYr,r0r3r7r9r;r>rArUrZr)rrbrgrmrpr(rwr~rs@rrrvs 7=A267 9= + $t"&!% + CG9 BF*.K @D(,OAE)-J (29<E 5C;1": (  98,&>A-1,0+Z % r>r)$r{__all__rDrGrr|r rrrrrrr r r r logr r_FlowControlMixin BaseTransportr! ReadTransportrWriteTransportrrDatagramTransportr Transportrr BaseEventLooprrr>rrs #  0$D!=!=!+!9!9DNP2!;!+!9!9P2fk"&@&0&?&?k"\"A,A=!;!+!=!=A=H "#=#B#-#7#7 "09>)3304IK55Ir>