B –?ÀoÐy"ã@sdZddlZddlZddlZddlZddlZddlZddlZy ddlZWne k r`dZYnXddl m Z ddl m Z ddl m Z ddl mZddl 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)ÚloggercCs6y| |¡}Wntk r"dSXt|j|@ƒSdS)NF)Úget_keyÚKeyErrorÚboolr)ÚselectorÚfdZeventÚkey©rú:/opt/alt/python37/lib/python3.7/asyncio/selector_events.pyÚ_test_selector_events rcCs tdk rt|tjƒrtdƒ‚dS)Nz"Socket cannot be of type SSLSocket)ÚsslÚ isinstanceZ SSLSocketÚ TypeError)ÚsockrrrÚ_check_ssl_socket*srcs‚eZdZdP‡fdd„ ZdQdddœdd„ZdRddddejdœd d „ZdSd 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)‡Z*S)TrNcsFtƒ ¡|dkrt ¡}t d|jj¡||_|  ¡t   ¡|_ dS)NzUsing selector: %s) ÚsuperÚ__init__Ú selectorsZDefaultSelectorr ÚdebugÚ __class__Ú__name__Ú _selectorÚ_make_self_pipeÚweakrefZWeakValueDictionaryÚ _transports)Úselfr)rrrr5s 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)r-)r%r&)r Z SSLProtocolr'Z_app_transport) r$Zrawsockr(Ú sslcontextr)r+r,r%r&r-Z ssl_protocolrrrÚ_make_ssl_transportDs z)BaseSelectorEventLoop._make_ssl_transportcCst||||||ƒS)N)Ú_SelectorDatagramTransport)r$rr(Úaddressr)r%rrrÚ_make_datagram_transportQsz.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$)rrrr6Vs   zBaseSelectorEventLoop.closecCsB| |j ¡¡|j ¡d|_|j ¡d|_|jd8_dS)Nr)Ú_remove_readerÚ_ssockÚfilenor6Ú_csockÚ _internal_fds)r$rrrr5as   z&BaseSelectorEventLoop._close_self_pipecCsNt ¡\|_|_|j d¡|j d¡|jd7_| |j ¡|j¡dS)NFr) ÚsocketZ socketpairr8r:Ú setblockingr;Ú _add_readerr9Ú_read_from_self)r$rrrr!is   z%BaseSelectorEventLoop._make_self_pipecCsdS)Nr)r$ÚdatarrrÚ_process_self_dataqsz(BaseSelectorEventLoop._process_self_datacCsVxPy |j d¡}|sP| |¡Wqtk r8wYqtk rLPYqXqWdS)Ni)r8ÚrecvrAÚInterruptedErrorÚBlockingIOError)r$r@rrrr?ts z%BaseSelectorEventLoop._read_from_selfcCsJ|j}|dk rFy| d¡Wn(tk rD|jr@tjdddYnXdS)Nóz3Fail to write a null byte into the self-pipe socketT)Úexc_info)r:ÚsendÚOSErrorÚ_debugr r)r$ZcsockrrrÚ_write_to_self€sz$BaseSelectorEventLoop._write_to_selfédc Cs"| | ¡|j||||||¡dS)N)r>r9Ú_accept_connection)r$Úprotocol_factoryrr.r&Úbacklogr-rrrÚ_start_servings z$BaseSelectorEventLoop._start_servingc Csxüt|ƒD]ð}y0| ¡\}} |jr4t d|| |¡| d¡Wn”tttfk rZdSt k rÔ} z^| j t j t j t j t jfkrÂ| d| |dœ¡| | ¡¡| tj|j||||||¡n‚Wdd} ~ XYq Xd| i} | ||| |||¡} | | ¡q WdS)Nz#%r got a new connection from %r: %rFz&socket.accept() out of system resource)ÚmessageÚ exceptionr<Úpeername)ÚrangeÚacceptrIr rr=rDrCÚConnectionAbortedErrorrHÚerrnoZEMFILEZENFILEZENOBUFSZENOMEMÚcall_exception_handlerr7r9Z call_laterrZACCEPT_RETRY_DELAYrOÚ_accept_connection2Z create_task) r$rMrr.r&rNr-Ú_ÚconnÚaddrÚexcr%rTrrrrL—s6      z(BaseSelectorEventLoop._accept_connectionc ÃsÖd}d}yl|ƒ}| ¡} |r8|j|||| d|||d}n|j||| ||d}y| IdHWn| ¡‚YnXWn\tk rÐ} z>|jrÀd| dœ} |dk r¦|| d<|dk r¶|| d<| | ¡Wdd} ~ XYnXdS)NT)r)r+r%r&r-)r)r%r&z3Error on transport creation for incoming connection)rPrQr(Ú transport)Ú create_futurer/r*r6Ú ExceptionrIrW) r$rMrZr%r.r&r-r(r]r)r\ÚcontextrrrrXÃs6  z)BaseSelectorEventLoop._accept_connection2c CsŽ|}t|tƒsJyt| ¡ƒ}Wn*tttfk rHtd|›ƒd‚YnXy|j|}Wntk rlYnX| ¡sŠt d|›d|›ƒ‚dS)NzInvalid file object: zFile descriptor z is used by transport ) rÚintr9ÚAttributeErrorrÚ ValueErrorr#r Ú is_closingr3)r$rr9r]rrrÚ_ensure_fd_no_transportês z-BaseSelectorEventLoop._ensure_fd_no_transportc Gs”| ¡t |||d¡}y|j |¡}Wn*tk rR|j |tj|df¡Yn>X|j|j }\}}|j  ||tjB||f¡|dk r|  ¡dS)N) Ú _check_closedrÚHandler r r ÚregisterrÚ EVENT_READr@ÚmodifyÚcancel) r$rÚcallbackÚargsÚhandlerÚmaskÚreaderÚwriterrrrr>üs  z!BaseSelectorEventLoop._add_readercCs’| ¡r dSy|j |¡}Wntk r0dSX|j|j}\}}|tjM}|sb|j |¡n|j  ||d|f¡|dk rŠ|  ¡dSdSdS)NFT) r4r r r rr@rriÚ unregisterrjrk)r$rrrorprqrrrr7 s z$BaseSelectorEventLoop._remove_readerc Gs”| ¡t |||d¡}y|j |¡}Wn*tk rR|j |tjd|f¡Yn>X|j|j }\}}|j  ||tjB||f¡|dk r|  ¡dS)N) rfrrgr r r rhrÚ EVENT_WRITEr@rjrk) r$rrlrmrnrrorprqrrrÚ _add_writer s  z!BaseSelectorEventLoop._add_writercCs’| ¡r dSy|j |¡}Wntk r0dSX|j|j}\}}|tjM}|sb|j |¡n|j  |||df¡|dk rŠ|  ¡dSdSdS)NFT) r4r r r rr@rrsrrrjrk)r$rrrorprqrrrÚ_remove_writer/s z$BaseSelectorEventLoop._remove_writercGs| |¡|j||f|žŽS)N)rer>)r$rrlrmrrrÚ add_readerFs z BaseSelectorEventLoop.add_readercCs| |¡| |¡S)N)rer7)r$rrrrÚ remove_readerKs z#BaseSelectorEventLoop.remove_readercGs| |¡|j||f|žŽS)N)rert)r$rrlrmrrrÚ add_writerPs z BaseSelectorEventLoop.add_writercCs| |¡| |¡S)N)reru)r$rrrrÚ remove_writerUs z#BaseSelectorEventLoop.remove_writercÃsDt|ƒ|jr"| ¡dkr"tdƒ‚| ¡}| |d||¡|IdHS)Nrzthe socket must be non-blocking)rrIÚ gettimeoutrcr^Ú _sock_recv)r$rÚnÚfutrrrÚ sock_recvZs zBaseSelectorEventLoop.sock_recvc Csœ|dk r| |¡| ¡rdSy| |¡}Wn`ttfk rb| ¡}| ||j||||¡Yn6tk rŒ}z|  |¡Wdd}~XYn X|  |¡dS)N) rwÚ cancelledrBrDrCr9rvr{r_Ú set_exceptionÚ set_result)r$r}Ú registered_fdrr|r@rr\rrrr{hs z BaseSelectorEventLoop._sock_recvcÃsDt|ƒ|jr"| ¡dkr"tdƒ‚| ¡}| |d||¡|IdHS)Nrzthe socket must be non-blocking)rrIrzrcr^Ú_sock_recv_into)r$rÚbufr}rrrÚsock_recv_into}s z$BaseSelectorEventLoop.sock_recv_intoc Csœ|dk r| |¡| ¡rdSy| |¡}Wn`ttfk rb| ¡}| ||j||||¡Yn6tk rŒ}z|  |¡Wdd}~XYn X|  |¡dS)N) rwrÚ recv_intorDrCr9rvrƒr_r€r)r$r}r‚rr„Únbytesrr\rrrrƒŠs z%BaseSelectorEventLoop._sock_recv_intocÃsTt|ƒ|jr"| ¡dkr"tdƒ‚| ¡}|r@| |d||¡n | d¡|IdHS)Nrzthe socket must be non-blocking)rrIrzrcr^Ú _sock_sendallr)r$rr@r}rrrÚ sock_sendall s  z"BaseSelectorEventLoop.sock_sendallc Cs¾|dk r| |¡| ¡rdSy| |¡}WnFttfk rHd}Yn,tk rr}z| |¡dSd}~XYnX|t|ƒkrŒ| d¡n.|rœ||d…}|  ¡}|  ||j ||||¡dS)Nr) ryrrGrDrCr_r€Úlenrr9rxrˆ)r$r}r‚rr@r|r\rrrrrˆ³s"     z#BaseSelectorEventLoop._sock_sendallcÃs†t|ƒ|jr"| ¡dkr"tdƒ‚ttdƒr8|jtjkrf|j||j|j |dIdH}|d\}}}}}|  ¡}|  |||¡|IdHS)Nrzthe socket must be non-blockingÚAF_UNIX)ÚfamilyÚprotoÚloop) rrIrzrcÚhasattrr<rŒr‹Z_ensure_resolvedrr^Ú _sock_connect)r$rr1ZresolvedrYr}rrrÚ sock_connectÉsz"BaseSelectorEventLoop.sock_connectc Cs| ¡}y| |¡Wnjttfk rV| t |j|¡¡| ||j |||¡Yn6t k r€}z|  |¡Wdd}~XYn X|  d¡dS)N) r9ZconnectrDrCZadd_done_callbackÚ functoolsÚpartialÚ_sock_connect_donerxÚ_sock_connect_cbr_r€r)r$r}rr1rr\rrrrÛsz#BaseSelectorEventLoop._sock_connectcCs| |¡dS)N)ry)r$rr}rrrr”ìsz(BaseSelectorEventLoop._sock_connect_donec CsŠ| ¡r dSy,| tjtj¡}|dkr6t|d|›ƒ‚WnBttfk rPYn6tk rz}z|  |¡Wdd}~XYn X|  d¡dS)NrzConnect call failed ) rZ getsockoptr<Z SOL_SOCKETZSO_ERRORrHrDrCr_r€r)r$r}rr1Úerrr\rrrr•ïsz&BaseSelectorEventLoop._sock_connect_cbcÃsBt|ƒ|jr"| ¡dkr"tdƒ‚| ¡}| |d|¡|IdHS)Nrzthe socket must be non-blockingF)rrIrzrcr^Ú _sock_accept)r$rr}rrrÚ sock_accepts z!BaseSelectorEventLoop.sock_acceptc Cs¦| ¡}|r| |¡| ¡r"dSy| ¡\}}| d¡WnVttfk rh| ||j|d|¡Yn:t k r’}z|  |¡Wdd}~XYnX|  ||f¡dS)NFT) r9rwrrTr=rDrCrvr—r_r€r)r$r}Z registeredrrrZr1r\rrrr—s  z"BaseSelectorEventLoop._sock_acceptc Ãsl|j|j=| ¡}| ¡| ¡IdHz|j|j|||ddIdHS| ¡|rZ| ¡||j|j<XdS)NF)Úfallback) r#Ú_sock_fdÚ is_readingÚ pause_readingÚ_make_empty_waiterZ sock_sendfileÚ_sockÚ_reset_empty_waiterÚresume_reading)r$ZtranspÚfileÚoffsetÚcountr rrrÚ_sendfile_natives z&BaseSelectorEventLoop._sendfile_nativecCs„x~|D]v\}}|j|j}\}}|tj@rN|dk rN|jrD| |¡n | |¡|tj@r|dk r|jrr| |¡q| |¡qWdS)N) Úfileobjr@rriZ _cancelledr7Z _add_callbackrsru)r$Z event_listrror¥rprqrrrÚ_process_events-s   z%BaseSelectorEventLoop._process_eventscCs| | ¡¡| ¡dS)N)r7r9r6)r$rrrrÚ _stop_serving;sz#BaseSelectorEventLoop._stop_serving)N)N)N)NNN)+rÚ __module__Ú __qualname__rr*rZSSL_HANDSHAKE_TIMEOUTr/r2r6r5r!rAr?rJrOrLrXrer>r7rtrurvrwrxryr~r{r…rƒr‰rˆr‘rr”r•r˜r—r¤r¦r§Ú __classcell__rr)rrr/sX    +$ rcsŒeZdZdZeZdZd‡fdd„ Zdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z dd„Zddd„Zdd„Zdd„Zdd„Zdd„Z‡ZS) Ú_SelectorTransportiNcsètƒ ||¡||jd<y| ¡|jd<Wntk rHd|jd<YnXd|jkrˆy| ¡|jd<Wn tjk r†d|jd<YnX||_|  ¡|_ d|_ |  |¡||_ | ¡|_d|_d|_|j dk rØ|j  ¡||j|j <dS)Nr<ZsocknamerRFr)rrÚ_extraZ getsocknamerHZ getpeernamer<Úerrorržr9ršÚ_protocol_connectedÚ set_protocolÚ_serverÚ_buffer_factoryÚ_bufferÚ _conn_lostÚ_closingZ_attachr#)r$rŽrr(r%r&)rrrrLs,       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<{}>ú )rrržÚappendr´ršÚ_loopr4rr rrirsÚget_write_buffer_sizeÚformatÚjoin)r$Úinfor·ÚstateÚbufsizerrrÚ__repr__fs*       z_SelectorTransport.__repr__cCs| d¡dS)N)Ú _force_close)r$rrrÚabort‚sz_SelectorTransport.abortcCs||_d|_dS)NT)Ú _protocolr®)r$r(rrrr¯…sz_SelectorTransport.set_protocolcCs|jS)N)rÅ)r$rrrÚ get_protocol‰sz_SelectorTransport.get_protocolcCs|jS)N)r´)r$rrrrdŒsz_SelectorTransport.is_closingcCsT|jr dSd|_|j |j¡|jsP|jd7_|j |j¡|j |jd¡dS)NTr) r´r»r7ršr²r³ruÚ call_soonÚ_call_connection_lost)r$rrrr6sz_SelectorTransport.closecCs.|jdk r*tjd|›t|d|j ¡dS)Nzunclosed transport )Úsource)ržÚwarningsÚwarnÚResourceWarningr6)r$rrrÚ__del__™s z_SelectorTransport.__del__úFatal error on transportcCsNt|tƒr(|j ¡r@tjd||ddn|j ||||jdœ¡| |¡dS)Nz%r: %sT)rF)rPrQr]r() rrHr»Ú get_debugr rrWrÅrÃ)r$r\rPrrrÚ _fatal_errorŸs   z_SelectorTransport._fatal_errorcCsd|jr dS|jr(|j ¡|j |j¡|jsBd|_|j |j¡|jd7_|j |j |¡dS)NTr) r³r²Úclearr»ruršr´r7rÇrÈ)r$r\rrrrís z_SelectorTransport._force_closecCsVz|jr|j |¡Wd|j ¡d|_d|_d|_|j}|dk rP| ¡d|_XdS)N)r®rÅZconnection_lostržr6r»r°Z_detach)r$r\r&rrrrȹs z(_SelectorTransport._call_connection_lostcCs t|jƒS)N)rŠr²)r$rrrr¼Çsz(_SelectorTransport.get_write_buffer_sizecGs"|jr dS|jj||f|žŽdS)N)r´r»r>)r$rrlrmrrrr>Êsz_SelectorTransport._add_reader)NN)rÎ)rr¨r©Úmax_sizeÚ bytearrayr±ržrrÂrÄr¯rÆrdr6rÍrÐrÃrÈr¼r>rªrr)rrr«@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¡dS)NF)Ú_read_ready_cbrrÚ_eofÚ_pausedÚ _empty_waiterrZ _set_nodelayržr»rÇrÅÚconnection_mader>ršÚ _read_readyrÚ_set_result_unless_cancelled)r$rŽrr(r)r%r&)rrrrÖs    z!_SelectorSocketTransport.__init__cs.t|tjƒr|j|_n|j|_tƒ |¡dS)N)rrZBufferedProtocolÚ_read_ready__get_bufferrÔÚ_read_ready__data_receivedrr¯)r$r()rrrr¯ís  z%_SelectorSocketTransport.set_protocolcCs|j o|j S)N)rÖr´)r$rrrr›õsz#_SelectorSocketTransport.is_readingcCs>|js |jrdSd|_|j |j¡|j ¡r:t d|¡dS)NTz%r pauses reading)r´rÖr»r7ršrÏr r)r$rrrrœøs   z&_SelectorSocketTransport.pause_readingcCs@|js |jsdSd|_| |j|j¡|j ¡rršrÙr»rÏr r)r$rrrr s   z'_SelectorSocketTransport.resume_readingcCs | ¡dS)N)rÔ)r$rrrrÙsz$_SelectorSocketTransport._read_readyc Cs|jr dSy |j d¡}t|ƒs(tdƒ‚Wn.tk rX}z| |d¡dSd}~XYnXy|j |¡}WnDt t fk r‚dStk r®}z| |d¡dSd}~XYnX|sÀ|  ¡dSy|j  |¡Wn0tk r}z| |d¡Wdd}~XYnXdS)Néÿÿÿÿz%get_buffer() returned an empty bufferz/Fatal error: protocol.get_buffer() call failed.z$Fatal read error on socket transportz3Fatal error: protocol.buffer_updated() call failed.) r³rÅZ get_bufferrŠr3r_rÐržr†rDrCÚ_read_ready__on_eofZbuffer_updated)r$r„r\r‡rrrrÛ s2   z0_SelectorSocketTransport._read_ready__get_bufferc Cs¶|jr dSy|j |j¡}WnDttfk r4dStk r`}z| |d¡dSd}~XYnX|sr| ¡dSy|j   |¡Wn.tk r°}z| |d¡Wdd}~XYnXdS)Nz$Fatal read error on socket transportz2Fatal error: protocol.data_received() call failed.) r³ržrBrÒrDrCr_rÐrÞrÅZ data_received)r$r@r\rrrrÜ*s" z3_SelectorSocketTransport._read_ready__data_receivedc Cst|j ¡rt d|¡y|j ¡}Wn.tk rR}z| |d¡dSd}~XYnX|rh|j |j ¡n|  ¡dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) r»rÏr rrÅZ eof_receivedr_rÐr7ršr6)r$Z keep_openr\rrrrÞ?s  z,_SelectorSocketTransport._read_ready__on_eofc Cst|tttfƒs$tdt|ƒj›ƒ‚|jr2tdƒ‚|j dk rDtdƒ‚|sLdS|j rz|j t j krht  d¡|j d7_ dS|jsþy|j |¡}WnDttfk rªYnBtk rÖ}z| |d¡dSd}~XYnX||d…}|sìdS|j |j|j¡|j |¡| ¡dS)Nz/data argument must be a bytes-like object, not z%Cannot call write() after write_eof()z(unable to write; sendfile is in progresszsocket.send() raised exception.rz%Fatal write error on socket transport)rÚbytesrÓÚ memoryviewrÚtyperrÕr3r×r³rÚ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr Úwarningr²ržrGrDrCr_rÐr»rtršÚ _write_readyÚextendÚ_maybe_pause_protocol)r$r@r|r\rrrÚwriteRs6      z_SelectorSocketTransport.writec Csü|jr dSy|j |j¡}Wnrttfk r4YnÄtk rŽ}z>|j |j ¡|j  ¡|  |d¡|j dk r~|j   |¡Wdd}~XYnjX|r |jd|…=| ¡|jsø|j |j ¡|j dk rÒ|j  d¡|jrä| d¡n|jrø|j tj¡dS)Nz%Fatal write error on socket transport)r³ržrGr²rDrCr_r»ruršrÑrÐr×r€Ú_maybe_resume_protocolrr´rÈrÕÚshutdownr<ÚSHUT_WR)r$r|r\rrrräws.       z%_SelectorSocketTransport._write_readycCs.|js |jrdSd|_|js*|j tj¡dS)NT)r´rÕr²ržrér<rê)r$rrrÚ write_eof“s  z"_SelectorSocketTransport.write_eofcCsdS)NTr)r$rrrÚ can_write_eofšsz&_SelectorSocketTransport.can_write_eofcs*tƒ |¡|jdk r&|j tdƒ¡dS)NzConnection is closed by peer)rrÈr×r€ÚConnectionError)r$r\)rrrrÈs  z._SelectorSocketTransport._call_connection_lostcCs6|jdk rtdƒ‚|j ¡|_|js0|j d¡|jS)NzEmpty waiter is already set)r×r3r»r^r²r)r$rrrr£s    z+_SelectorSocketTransport._make_empty_waitercCs d|_dS)N)r×)r$rrrrŸ«sz,_SelectorSocketTransport._reset_empty_waiter)NNN)rr¨r©Z_start_tls_compatiblerZ _SendfileModeZ TRY_NATIVEZ_sendfile_compatiblerr¯r›rœr rÙrÛrÜrÞrçrärërìrÈrrŸrªrr)rrr'Ñs& % r'csFeZdZejZd ‡fdd„ Zdd„Zdd„Zd dd „Z d d „Z ‡Z S)r0Ncs^tƒ ||||¡||_|j |jj|¡|j |j|j|j ¡|dk rZ|j t j |d¡dS)N) rrÚ_addressr»rÇrÅrØr>ršrÙrrÚ)r$rŽrr(r1r)r%)rrrr³s   z#_SelectorDatagramTransport.__init__cCstdd„|jDƒƒS)Ncss|]\}}t|ƒVqdS)N)rŠ)Ú.0r@rYrrrú ÁszC_SelectorDatagramTransport.get_write_buffer_size..)Úsumr²)r$rrrr¼Àsz0_SelectorDatagramTransport.get_write_buffer_sizec Cs¤|jr dSy|j |j¡\}}Wnpttfk r8Ynhtk rd}z|j |¡Wdd}~XYn<t k r}z|  |d¡Wdd}~XYnX|j  ||¡dS)Nz&Fatal read error on datagram transport) r³ržZrecvfromrÒrDrCrHrÅÚerror_receivedr_rÐZdatagram_received)r$r@r[r\rrrrÙÃsz&_SelectorDatagramTransport._read_readyc Csdt|tttfƒs$tdt|ƒj›ƒ‚|s,dS|jrV|d|jfkrPtd|j›ƒ‚|j}|j rŠ|jrŠ|j t j krxt   d¡|j d7_ dS|jsDy*|jdr¬|j |¡n|j ||¡dSttfk ræ|j |j|j¡Yn^tk r}z|j |¡dSd}~XYn0tk rB}z| |d¡dSd}~XYnX|j t|ƒ|f¡| ¡dS)Nz/data argument must be a bytes-like object, not z!Invalid address: must be None or zsocket.send() raised exception.rrRz'Fatal write error on datagram transport) rrßrÓràrrárrîrcr³rrâr rãr²r¬ržrGÚsendtorDrCr»rtršÚ _sendto_readyrHrÅròr_rÐrºræ)r$r@r[r\rrrróÑs>     z!_SelectorDatagramTransport.sendtoc CsøxÆ|jrÆ|j ¡\}}y*|jdr0|j |¡n|j ||¡Wqttfk rj|j ||f¡PYqt k r–}z|j   |¡dSd}~XYqt k rÂ}z|  |d¡dSd}~XYqXqW| ¡|jsô|j |j¡|jrô| d¡dS)NrRz'Fatal write error on datagram transport)r²Úpopleftr¬ržrGrórDrCÚ appendleftrHrÅròr_rÐrèr»ruršr´rÈ)r$r@r[r\rrrrôús*  z(_SelectorDatagramTransport._sendto_ready)NNN)N) rr¨r©Ú collectionsÚdequer±rr¼rÙrórôrªrr)rrr0¯s  )r0)Ú__all__r÷rVr’rr<rÊr"rÚ ImportErrorÚrrrrrr r Úlogr rrZ BaseEventLooprZ_FlowControlMixinZ Transportr«r'r0rrrrÚs@           _