U e5dT˜ã@s*dZddlZddlZddlZddlZddlZddlZddlZz ddlZWne k r`dZYnXddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd lmZd d„Zdd„ZGdd„de jƒZGdd„dejejƒZGdd„deƒZGdd„deƒZdS))ÚBaseSelectorEventLoopéNé)Ú base_events)Ú constants)Úevents)Úfutures)Ú protocols)Ússlproto)Ú transports)Útrsock)ÚloggercCs8z| |¡}Wntk r$YdSXt|j|@ƒSdS©NF)Úget_keyÚKeyErrorÚboolr)ÚselectorÚfdZeventÚkey©rú//usr/lib64/python3.8/asyncio/selector_events.pyÚ_test_selector_event s rcCs tdk rt|tjƒrtdƒ‚dS)Nz"Socket cannot be of type SSLSocket)ÚsslÚ isinstanceZ SSLSocketÚ TypeError)ÚsockrrrÚ_check_ssl_socket+srcsŠeZdZdR‡fdd„ ZdSdddœdd„ZdTddddejdœd d „ZdUd d „Z‡fd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdddejfdd„Zdddejfdd„Zddejfdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Z!d@dA„Z"dBdC„Z#dDdE„Z$dFdG„Z%dHdI„Z&dJdK„Z'dLdM„Z(dNdO„Z)dPdQ„Z*‡Z+S)VrNcsFtƒ ¡|dkrt ¡}t d|jj¡||_|  ¡t   ¡|_ dS)NzUsing selector: %s) ÚsuperÚ__init__Ú selectorsZDefaultSelectorr ÚdebugÚ __class__Ú__name__Ú _selectorÚ_make_self_pipeÚweakrefZWeakValueDictionaryÚ _transports)Úselfr©r rrr6s zBaseSelectorEventLoop.__init__©ÚextraÚservercCst||||||ƒS©N)Ú_SelectorSocketTransport)r&rÚprotocolÚwaiterr)r*rrrÚ_make_socket_transport@s ÿz,BaseSelectorEventLoop._make_socket_transportF)Ú server_sideÚserver_hostnamer)r*Ússl_handshake_timeoutc Cs0tj||||||| d�} t||| ||d�| jS)N)r2r()r Z SSLProtocolr,Z_app_transport) r&Zrawsockr-Ú sslcontextr.r0r1r)r*r2Z ssl_protocolrrrÚ_make_ssl_transportEsýÿz)BaseSelectorEventLoop._make_ssl_transportcCst||||||ƒSr+)Ú_SelectorDatagramTransport)r&rr-Úaddressr.r)rrrÚ_make_datagram_transportRs ÿz.BaseSelectorEventLoop._make_datagram_transportcsL| ¡rtdƒ‚| ¡rdS| ¡tƒ ¡|jdk rH|j ¡d|_dS)Nz!Cannot close a running event loop)Z is_runningÚ RuntimeErrorÚ is_closedÚ_close_self_piperÚcloser"©r&r'rrr;Ws   zBaseSelectorEventLoop.closecCsB| |j ¡¡|j ¡d|_|j ¡d|_|jd8_dS)Nr)Ú_remove_readerÚ_ssockÚfilenor;Ú_csockÚ _internal_fdsr<rrrr:bs   z&BaseSelectorEventLoop._close_self_pipecCsNt ¡\|_|_|j d¡|j d¡|jd7_| |j ¡|j¡dS)NFr) ÚsocketZ socketpairr>r@Ú setblockingrAÚ _add_readerr?Ú_read_from_selfr<rrrr#js   z%BaseSelectorEventLoop._make_self_pipecCsdSr+r©r&ÚdatarrrÚ_process_self_datarsz(BaseSelectorEventLoop._process_self_datacCsXz"|j d¡}|sWqT| |¡Wqtk r:YqYqtk rPYqTYqXqdS)Ni)r>ÚrecvrHÚInterruptedErrorÚBlockingIOErrorrFrrrrEus z%BaseSelectorEventLoop._read_from_selfcCsN|j}|dkrdSz| d¡Wn(tk rH|jrDtjddd�YnXdS)Nóz3Fail to write a null byte into the self-pipe socketT©Úexc_info)r@ÚsendÚOSErrorÚ_debugr r)r&ZcsockrrrÚ_write_to_self�sþz$BaseSelectorEventLoop._write_to_selfédc Cs"| | ¡|j||||||¡dSr+)rDr?Ú_accept_connection)r&Úprotocol_factoryrr3r*Úbacklogr2rrrÚ_start_serving“sþz$BaseSelectorEventLoop._start_servingc Cst|ƒD]ú}z0| ¡\}} |jr0t d|| |¡| d¡Wnžtttfk rZYdSt k rÚ} zd| j t j t j t j t jfkrÈ| d| t |¡dœ¡| | ¡¡| tj|j||||||¡n‚W5d} ~ XYqXd| i} | ||| |||¡} | | ¡qdS)Nz#%r got a new connection from %r: %rFz&socket.accept() out of system resource)ÚmessageÚ exceptionrBÚpeername)ÚrangeÚacceptrQr rrCrKrJÚConnectionAbortedErrorrPÚerrnoZEMFILEZENFILEZENOBUFSZENOMEMÚcall_exception_handlerr ÚTransportSocketr=r?Z call_laterrZACCEPT_RETRY_DELAYrWÚ_accept_connection2Z create_task) r&rUrr3r*rVr2Ú_ÚconnÚaddrÚexcr)r\rrrrTšsV  ÿ ÿýýþz(BaseSelectorEventLoop._accept_connectionc Ãsöd}d}zt|ƒ}| ¡} |r8|j|||| d|||d�}n|j||| ||d�}z| IdHWntk rx| ¡‚YnXWntttfk r–‚Yn\tk rð} z>|jràd| dœ} |dk rÆ|| d<|dk rÖ|| d<| | ¡W5d} ~ XYnXdS)NT)r.r0r)r*r2)r.r)r*z3Error on transport creation for incoming connection)rXrYr-Ú transport) Ú create_futurer4r/Ú BaseExceptionr;Ú SystemExitÚKeyboardInterruptrQr_) r&rUrcr)r3r*r2r-rfr.reÚcontextrrrraÆsPýþ ýz)BaseSelectorEventLoop._accept_connection2c CsŽ|}t|tƒsJzt| ¡ƒ}Wn*tttfk rHtd|›�ƒd‚YnXz|j|}Wntk rlYnX| ¡sŠt d|›d|›�ƒ‚dS)NzInvalid file object: zFile descriptor z is used by transport ) rÚintr?ÚAttributeErrorrÚ ValueErrorr%rÚ is_closingr8)r&rr?rfrrrÚ_ensure_fd_no_transportïs ÿz-BaseSelectorEventLoop._ensure_fd_no_transportc Gs”| ¡t |||d¡}z|j |¡}Wn*tk rR|j |tj|df¡Yn>X|j|j }\}}|j  ||tjB||f¡|dk r�|  ¡dSr+) Ú _check_closedrÚHandler"rrÚregisterrÚ EVENT_READrGÚmodifyÚcancel© r&rÚcallbackÚargsZhandlerÚmaskÚreaderÚwriterrrrrDs ÿ ÿz!BaseSelectorEventLoop._add_readercCs”| ¡r dSz|j |¡}Wntk r2YdSX|j|j}\}}|tjM}|sd|j |¡n|j  ||d|f¡|dk rŒ|  ¡dSdSdS©NFT) r9r"rrrrGrrtÚ unregisterrurv©r&rrrzr{r|rrrr=s z$BaseSelectorEventLoop._remove_readerc Gs”| ¡t |||d¡}z|j |¡}Wn*tk rR|j |tjd|f¡Yn>X|j|j }\}}|j  ||tjB||f¡|dk r�|  ¡dSr+) rqrrrr"rrrsrÚ EVENT_WRITErGrurvrwrrrÚ _add_writer%s ÿ ÿz!BaseSelectorEventLoop._add_writercCs”| ¡r dSz|j |¡}Wntk r2YdSX|j|j}\}}|tjM}|sd|j |¡n|j  |||df¡|dk rŒ|  ¡dSdSdSr}) r9r"rrrrGrr€r~rurvrrrrÚ_remove_writer4s z$BaseSelectorEventLoop._remove_writercGs| |¡|j||f|žŽSr+)rprD©r&rrxryrrrÚ add_readerKs z BaseSelectorEventLoop.add_readercCs| |¡| |¡Sr+)rpr=©r&rrrrÚ remove_readerPs z#BaseSelectorEventLoop.remove_readercGs| |¡|j||f|žŽSr+)rpr�rƒrrrÚ add_writerUs z BaseSelectorEventLoop.add_writercCs| |¡| |¡Sr+)rpr‚r…rrrÚ remove_writerZs z#BaseSelectorEventLoop.remove_writerc ÃsŠt|ƒ|jr"| ¡dkr"tdƒ‚z | |¡WSttfk rFYnX| ¡}| ¡}|  ||j |||¡|  t   |j|¡¡|IdHS©Nrúthe socket must be non-blocking)rrQÚ gettimeoutrnrIrKrJrgr?r„Ú _sock_recvÚadd_done_callbackÚ functoolsÚpartialÚ_sock_read_done)r&rÚnÚfutrrrrÚ sock_recv_s  ÿzBaseSelectorEventLoop.sock_recvcCs| |¡dSr+)r†©r&rr’rrrr�tsz%BaseSelectorEventLoop._sock_read_donec Cs†| ¡r dSz| |¡}Wn\ttfk r4YdSttfk rL‚Yn6tk rv}z| |¡W5d}~XYn X| |¡dSr+) ÚdonerIrKrJrirjrhÚ set_exceptionÚ set_result)r&r’rr‘rGrerrrrŒwsz BaseSelectorEventLoop._sock_recvc ÃsŠt|ƒ|jr"| ¡dkr"tdƒ‚z | |¡WSttfk rFYnX| ¡}| ¡}|  ||j |||¡|  t   |j|¡¡|IdHSr‰)rrQr‹rnÚ recv_intorKrJrgr?r„Ú_sock_recv_intor�rŽr�r�)r&rÚbufr’rrrrÚsock_recv_into‡s  ÿz$BaseSelectorEventLoop.sock_recv_intoc Cs†| ¡r dSz| |¡}Wn\ttfk r4YdSttfk rL‚Yn6tk rv}z| |¡W5d}~XYn X| |¡dSr+) r•r˜rKrJrirjrhr–r—)r&r’rršÚnbytesrerrrr™›sz%BaseSelectorEventLoop._sock_recv_intoc Ãs¨t|ƒ|jr"| ¡dkr"tdƒ‚z| |¡}Wnttfk rLd}YnX|t|ƒkr^dS| ¡}|  ¡}|  t   |j |¡¡| ||j||t|ƒ|g¡|IdHSr‰)rrQr‹rnrOrKrJÚlenrgr?r�rŽr�Ú_sock_write_doner‡Ú _sock_sendallÚ memoryview)r&rrGr‘r’rrrrÚ sock_sendall¬s&    ÿÿz"BaseSelectorEventLoop.sock_sendallc Csº| ¡r dS|d}z| ||d…¡}Wnbttfk rDYdSttfk r\‚Yn2tk rŒ}z| |¡WY¢dSd}~XYnX||7}|t|ƒkr®|  d¡n||d<dS)Nr) r•rOrKrJrirjrhr–r�r—)r&r’rZviewÚposÚstartr‘rerrrrŸÊs    z#BaseSelectorEventLoop._sock_sendallcÃs†t|ƒ|jr"| ¡dkr"tdƒ‚ttdƒr8|jtjkrf|j||j|j |d�IdH}|d\}}}}}|  ¡}|  |||¡|IdHS)NrrŠÚAF_UNIX)ÚfamilyÚprotoÚloop) rrQr‹rnÚhasattrrBr¥r¤Z_ensure_resolvedr¦rgÚ _sock_connect)r&rr6Zresolvedrbr’rrrÚ sock_connectàsÿ z"BaseSelectorEventLoop.sock_connectc Cs¨| ¡}z| |¡Wn‚ttfk rV| t |j|¡¡| ||j |||¡YnNt t fk rn‚Yn6t k r˜}z|  |¡W5d}~XYn X| d¡dSr+)r?ZconnectrKrJr�rŽr�ržr‡Ú_sock_connect_cbrirjrhr–r—)r&r’rr6rrerrrr©òs ÿz#BaseSelectorEventLoop._sock_connectcCs| |¡dSr+)rˆr”rrrržsz&BaseSelectorEventLoop._sock_write_donec Cs¢| ¡r dSz,| tjtj¡}|dkr6t|d|›�ƒ‚WnZttfk rPYnNtt fk rh‚Yn6t k r’}z|  |¡W5d}~XYn X|  d¡dS)NrzConnect call failed ) r•Z getsockoptrBZ SOL_SOCKETZSO_ERRORrPrKrJrirjrhr–r—)r&r’rr6Úerrrerrrr«sz&BaseSelectorEventLoop._sock_connect_cbcÃsBt|ƒ|jr"| ¡dkr"tdƒ‚| ¡}| |d|¡|IdHS)NrrŠF)rrQr‹rnrgÚ _sock_accept)r&rr’rrrÚ sock_accepts z!BaseSelectorEventLoop.sock_acceptc Cs¾| ¡}|r| |¡| ¡r"dSz| ¡\}}| d¡Wnnttfk rh| ||j|d|¡YnRt t fk r€‚Yn:t k rª}z|  |¡W5d}~XYnX|  ||f¡dSr})r?r†r•r\rCrKrJr„r­rirjrhr–r—)r&r’Z registeredrrrcr6rerrrr­*s  z"BaseSelectorEventLoop._sock_acceptc Ãsp|j|j=| ¡}| ¡| ¡IdHz |j|j|||dd�IdHW¢S| ¡|r^| ¡||j|j<XdS)NF)Zfallback) r%Ú_sock_fdÚ is_readingÚ pause_readingÚ_make_empty_waiterÚ_reset_empty_waiterÚresume_readingZ sock_sendfileÚ_sock)r&ZtranspÚfileÚoffsetÚcountr´rrrÚ_sendfile_native<s ÿz&BaseSelectorEventLoop._sendfile_nativecCs€|D]v\}}|j|j}\}}|tj@rL|dk rL|jrB| |¡n | |¡|tj@r|dk r|jrp| |¡q| |¡qdSr+) ÚfileobjrGrrtZ _cancelledr=Z _add_callbackr€r‚)r&Z event_listrrzrºr{r|rrrÚ_process_eventsJs    z%BaseSelectorEventLoop._process_eventscCs| | ¡¡| ¡dSr+)r=r?r;)r&rrrrÚ _stop_servingXsz#BaseSelectorEventLoop._stop_serving)N)N)N)NNN),r!Ú __module__Ú __qualname__rr/rZSSL_HANDSHAKE_TIMEOUTr4r7r;r:r#rHrErRrWrTrarprDr=r�r‚r„r†r‡rˆr“r�rŒr›r™r¡rŸrªr©ržr«r®r­r¹r»r¼Ú __classcell__rrr'rr0s| ÿ ÿü ÿ   þ ý .ý )rcs’eZdZdZeZdZd‡fdd„ Zdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z ejfdd„Zddd„Zdd„Zdd„Zdd„Zdd„Z‡ZS) Ú_SelectorTransportiNcsîtƒ ||¡t |¡|jd<z| ¡|jd<Wntk rNd|jd<YnXd|jkrŽz| ¡|jd<Wn tj k rŒd|jd<YnX||_ |  ¡|_ d|_ | |¡||_| ¡|_d|_d|_|jdk rÞ|j ¡||j|j <dS)NrBZsocknamerZFr)rrr r`Ú_extraZ getsocknamerPZ getpeernamerBÚerrorrµr?r¯Ú_protocol_connectedÚ set_protocolÚ_serverÚ_buffer_factoryÚ_bufferÚ _conn_lostÚ_closingZ_attachr%)r&r§rr-r)r*r'rrris,      z_SelectorTransport.__init__cCsÖ|jjg}|jdkr | d¡n|jr0| d¡| d|j›�¡|jdk rÆ|j ¡sÆt|jj |jt j ƒ}|rz| d¡n | d¡t|jj |jt j ƒ}|r¢d}nd}|  ¡}| d|›d |›d �¡d  d  |¡¡S) NÚclosedÚclosingzfd=z read=pollingz read=idleÚpollingZidlezwrite=z<{}>ú )r r!rµÚappendrÉr¯Ú_loopr9rr"rrtr€Úget_write_buffer_sizeÚformatÚjoin)r&ÚinforÌÚstateÚbufsizerrrÚ__repr__ƒs0    ÿ  þz_SelectorTransport.__repr__cCs| d¡dSr+)Ú _force_closer<rrrÚabortŸsz_SelectorTransport.abortcCs||_d|_dS©NT)Ú _protocolrér&r-rrrrÄ¢sz_SelectorTransport.set_protocolcCs|jSr+)rÛr<rrrÚ get_protocol¦sz_SelectorTransport.get_protocolcCs|jSr+)rÉr<rrrro©sz_SelectorTransport.is_closingcCsT|jr dSd|_|j |j¡|jsP|jd7_|j |j¡|j |jd¡dS©NTr) rÉrÐr=r¯rÇrÈr‚Ú call_soonÚ_call_connection_lostr<rrrr;¬sz_SelectorTransport.closecCs,|jdk r(|d|›�t|d�|j ¡dS)Nzunclosed transport )Úsource)rµÚResourceWarningr;)r&Z_warnrrrÚ__del__¶s z_SelectorTransport.__del__úFatal error on transportcCsNt|tƒr(|j ¡r@tjd||dd�n|j ||||jdœ¡| |¡dS)Nz%r: %sTrM)rXrYrfr-) rrPrÐÚ get_debugr rr_rÛrØ)r&rerXrrrÚ _fatal_error»s  üz_SelectorTransport._fatal_errorcCsd|jr dS|jr(|j ¡|j |j¡|jsBd|_|j |j¡|jd7_|j |j |¡dSrÞ) rÈrÇÚclearrÐr‚r¯rÉr=rßrà©r&rerrrrØÉs z_SelectorTransport._force_closecCsVz|jr|j |¡W5|j ¡d|_d|_d|_|j}|dk rP| ¡d|_XdSr+)rµr;rÛrÐrÅZ_detachrÃZconnection_lost)r&rer*rrrràÕs z(_SelectorTransport._call_connection_lostcCs t|jƒSr+)r�rÇr<rrrrÑãsz(_SelectorTransport.get_write_buffer_sizecGs"|jr dS|jj||f|žŽdSr+)rÉrÐrDrƒrrrrDæsz_SelectorTransport._add_reader)NN)rä)r!r½r¾Úmax_sizeÚ bytearrayrÆrµrr×rÙrÄrÝror;ÚwarningsÚwarnrãrærØràrÑrDr¿rrr'rrÀ]s    rÀcsªeZdZdZejjZd#‡fdd„ Z‡fdd„Z dd„Z d d „Z d d „Z d d„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z‡fdd„Zdd „Zd!d"„Z‡ZS)$r,TNcs~d|_tƒ |||||¡d|_d|_d|_t |j¡|j   |j j |¡|j   |j |j|j¡|dk rz|j   tj|d¡dSr )Ú_read_ready_cbrrÚ_eofÚ_pausedÚ _empty_waiterrZ _set_nodelayrµrÐrßrÛÚconnection_maderDr¯Ú _read_readyrÚ_set_result_unless_cancelled)r&r§rr-r.r)r*r'rrròs   ÿ ÿz!_SelectorSocketTransport.__init__cs.t|tjƒr|j|_n|j|_tƒ |¡dSr+)rrZBufferedProtocolÚ_read_ready__get_bufferríÚ_read_ready__data_receivedrrÄrÜr'rrrÄ s  z%_SelectorSocketTransport.set_protocolcCs|j o|j Sr+)rïrÉr<rrrr°sz#_SelectorSocketTransport.is_readingcCs>|js |jrdSd|_|j |j¡|j ¡r:t d|¡dS)NTz%r pauses reading)rÉrïrÐr=r¯rår rr<rrrr±s   z&_SelectorSocketTransport.pause_readingcCs@|js |jsdSd|_| |j|j¡|j ¡r‚Yn4tk rp}z|  |d¡WY¢dSd}~XYnX|r†|j  |j ¡n|  ¡dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rÐrår rrÛZ eof_receivedrirjrhrær=r¯r;)r&Z keep_openrerrrrøes  ÿz,_SelectorSocketTransport._read_ready__on_eofc Cs6t|tttfƒs$tdt|ƒj›�ƒ‚|jr2tdƒ‚|j dk rDtdƒ‚|sLdS|j rz|j t j krht  d¡|j d7_ dS|j�sz|j |¡}Wnbttfk rªYnbttfk r‚YnJtk rô}z| |d¡WY¢dSd}~XYnX||d…}|�s dS|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 progressúsocket.send() raised exception.rú%Fatal write error on socket transport)rÚbytesrêr rÚtyper!rîr8rðrÈrÚ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr ÚwarningrÇrµrOrKrJrirjrhrærÐr�r¯Ú _write_readyÚextendÚ_maybe_pause_protocol)r&rGr‘rerrrÚwritezs:      z_SelectorSocketTransport.writec Cs|jr dSz|j |j¡}WnŠttfk r4Ynàttfk rL‚YnÈtk r¦}z>|j   |j ¡|j  ¡|  |d¡|jdk r–|j |¡W5d}~XYnnX|r¸|jd|…=| ¡|j�s|j   |j ¡|jdk rì|j d¡|jrþ| d¡n|j�r|j tj¡dS)Nrû)rÈrµrOrÇrKrJrirjrhrÐr‚r¯rçrærðr–Ú_maybe_resume_protocolr—rÉràrîÚshutdownrBÚSHUT_WR)r&r‘rerrrr¡s2       z%_SelectorSocketTransport._write_readycCs.|js |jrdSd|_|js*|j tj¡dSrÚ)rÉrîrÇrµrrBrr<rrrÚ write_eof¿s  z"_SelectorSocketTransport.write_eofcCsdSrÚrr<rrrÚ can_write_eofÆsz&_SelectorSocketTransport.can_write_eofcs*tƒ |¡|jdk r&|j tdƒ¡dS)NzConnection is closed by peer)rràrðr–ÚConnectionErrorrèr'rrràÉs   ÿz._SelectorSocketTransport._call_connection_lostcCs6|jdk rtdƒ‚|j ¡|_|js0|j d¡|jS)NzEmpty waiter is already set)rðr8rÐrgrÇr—r<rrrr²Ïs    z+_SelectorSocketTransport._make_empty_waitercCs d|_dSr+)rðr<rrrr³×sz,_SelectorSocketTransport._reset_empty_waiter)NNN)r!r½r¾Z_start_tls_compatiblerZ _SendfileModeZ TRY_NATIVEZ_sendfile_compatiblerrÄr°r±r´ròrôrõrørrrrràr²r³r¿rrr'rr,ís*ÿ %' r,csFeZdZejZd ‡fdd„ Zdd„Zdd„Zd dd „Z d d „Z ‡Z S)r5Ncs^tƒ ||||¡||_|j |jj|¡|j |j|j|j ¡|dk rZ|j t j |d¡dSr+) rrÚ_addressrÐrßrÛrñrDr¯ròrró)r&r§rr-r6r.r)r'rrrßs ÿ ÿz#_SelectorDatagramTransport.__init__cCstdd„|jDƒƒS)Ncss|]\}}t|ƒVqdSr+)r�)Ú.0rGrbrrrÚ íszC_SelectorDatagramTransport.get_write_buffer_size..)ÚsumrÇr<rrrrÑìsz0_SelectorDatagramTransport.get_write_buffer_sizec Cs¼|jr dSz|j |j¡\}}Wnˆttfk r8Yn€tk rd}z|j |¡W5d}~XYnTt t fk r|‚Yn<t k r¨}z|  |d¡W5d}~XYnX|j  ||¡dS)Nz&Fatal read error on datagram transport)rÈrµZrecvfromrérKrJrPrÛÚerror_receivedrirjrhræZdatagram_received©r&rGrdrerrrròïsz&_SelectorDatagramTransport._read_readyc CsŒt|tttfƒs$tdt|ƒj›�ƒ‚|s,dS|jrV|d|jfkrPtd|j›�ƒ‚|j}|j rŠ|jrŠ|j t j krxt   d¡|j d7_ dS|j�slz,|jdr¬|j |¡n|j ||¡WdSttfk rè|j |j|j¡Yn„tk �r}z|j |¡WY¢dSd}~XYnPttfk �r6‚Yn6tk �rj}z| |d¡WY¢dSd}~XYnX|j  t|ƒ|f¡| !¡dS)Nrùz!Invalid address: must be None or rúrrZú'Fatal write error on datagram transport)"rrürêr rrýr!r rnrÈrrþr rÿrÇrÁrµrOÚsendtorKrJrÐr�r¯Ú _sendto_readyrPrÛrrirjrhrærÏrrrrrrÿsH ÿ     ÿz!_SelectorDatagramTransport.sendtoc Cs|jrê|j ¡\}}z*|jdr.|j |¡n|j ||¡Wqttfk rj|j ||f¡YqêYqt k rœ}z|j   |¡WY¢dSd}~XYqt t fk r´‚Yqtk ræ}z| |d¡WY¢dSd}~XYqXq| ¡|j�s|j |j¡|j�r| d¡dS)NrZr)rÇÚpopleftrÁrµrOrrKrJÚ appendleftrPrÛrrirjrhrærrÐr‚r¯rÉràrrrrr*s2  ÿz(_SelectorDatagramTransport._sendto_ready)NNN)N) r!r½r¾Ú collectionsÚdequerÆrrÑròrrr¿rrr'rr5Ûsÿ  +r5)Ú__all__rr^rŽrrBrër$rÚ ImportErrorÚrrrrrr r r Úlogr rrZ BaseEventLooprZ_FlowControlMixinZ TransportrÀr,r5rrrrÚsD            1ÿo