grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 \¨¢ã @s<dZdgZddlZddlZddlZddlZddlZddlZy ddlZWne k r^dZYnXddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd l mZdd lmZddlmZdd„ZGdd„de jƒZGdd„dejejƒZGdd„deƒZGdd„deƒZGdd„deƒZdS)zÄEvent 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. ÚBaseSelectorEventLoopéNé)Ú base_events)Úcompat)Ú constants)Úevents)Úfutures)Ú selectors)Ú transports)Ússlproto)Ú coroutine)Úloggerc Cs6y|j|ƒ}Wntk r"dSXt|j|@ƒSdS)NF)Úget_keyÚKeyErrorÚboolr)ÚselectorÚfdZeventÚkey©rú//usr/lib64/python3.6/asyncio/selector_events.pyÚ_test_selector_event s rcsreZdZdZdO‡fdd„ ZdPdddœdd„ZdQddddd œd d „Zddddd œd d „ZdRdd„Z‡fdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdSdd „ZdTd!d"„ZedUd#d$„ƒZd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Zd=d>„Z ed?d@„ƒZ!dAdB„Z"dCdD„Z#dEdF„Z$dGdH„Z%dIdJ„Z&dKdL„Z'dMdN„Z(‡Z)S)VrzJSelector event loop. See events.EventLoop for API specification. NcsFtƒjƒ|dkrtjƒ}tjd|jjƒ||_|j ƒt j ƒ|_ dS)NzUsing selector: %s) ÚsuperÚ__init__r ZDefaultSelectorr ÚdebugÚ __class__Ú__name__Ú _selectorÚ_make_self_pipeÚweakrefÚWeakValueDictionaryÚ _transports)Úselfr)rrrr1s zBaseSelectorEventLoop.__init__)ÚextraÚservercCst||||||ƒS)N)Ú_SelectorSocketTransport)r!ÚsockÚprotocolÚwaiterr"r#rrrÚ_make_socket_transport;s z,BaseSelectorEventLoop._make_socket_transportF)Ú server_sideÚserver_hostnamer"r#c CsNtjƒs"|j||||||||d�Stj||||||ƒ} t||| ||d�| jS)N)r)r*r"r#)r"r#)r Z_is_sslproto_availableÚ_make_legacy_ssl_transportZ SSLProtocolr$Z_app_transport) r!Úrawsockr&Ú sslcontextr'r)r*r"r#Z ssl_protocolrrrÚ_make_ssl_transport@s   z)BaseSelectorEventLoop._make_ssl_transportc Cst|||||||||ƒ S)N)Ú_SelectorSslTransport) r!r,r&r-r'r)r*r"r#rrrr+Os z0BaseSelectorEventLoop._make_legacy_ssl_transportcCst||||||ƒS)N)Ú_SelectorDatagramTransport)r!r%r&Úaddressr'r"rrrÚ_make_datagram_transportYsz.BaseSelectorEventLoop._make_datagram_transportcsL|jƒrtdƒ‚|jƒrdS|jƒtƒjƒ|jdk rH|jjƒd|_dS)Nz!Cannot close a running event loop)Z is_runningÚ RuntimeErrorÚ is_closedÚ_close_self_piperÚcloser)r!)rrrr6^s   zBaseSelectorEventLoop.closecCst‚dS)N)ÚNotImplementedError)r!rrrÚ _socketpairisz!BaseSelectorEventLoop._socketpaircCsB|j|jjƒƒ|jjƒd|_|jjƒd|_|jd8_dS)Nr)Ú_remove_readerÚ_ssockÚfilenor6Ú_csockÚ _internal_fds)r!rrrr5ls   z&BaseSelectorEventLoop._close_self_pipecCsN|jƒ\|_|_|jjdƒ|jjdƒ|jd7_|j|jjƒ|jƒdS)NFr)r8r:r<Ú setblockingr=Ú _add_readerr;Ú_read_from_self)r!rrrrts   z%BaseSelectorEventLoop._make_self_pipecCsdS)Nr)r!ÚdatarrrÚ_process_self_data|sz(BaseSelectorEventLoop._process_self_datac CsVxPy |jjdƒ}|sP|j|ƒWqtk r8wYqtk rLPYqXqWdS)Ni)r:ÚrecvrBÚInterruptedErrorÚBlockingIOError)r!rArrrr@s z%BaseSelectorEventLoop._read_from_selfc CsJ|j}|dk rFy|jdƒWn(tk rD|jr@tjddd�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‹sz$BaseSelectorEventLoop._write_to_selfédcCs |j|jƒ|j|||||ƒdS)N)r?r;Ú_accept_connection)r!Úprotocol_factoryr%r-r#ÚbacklogrrrÚ_start_serving›sz$BaseSelectorEventLoop._start_servingc Csþxøt|ƒD]ì}y0|jƒ\}}|jr2tjd|||ƒ|jdƒWn’tttfk rXdSt k rÐ} z^| j t j t j t j t jfkr¾|jd| |dœƒ|j|jƒƒ|jtj|j|||||ƒn‚WYdd} ~ Xq Xd|i} |j||| ||ƒ} |j| ƒq WdS)Nz#%r got a new connection from %r: %rFz&socket.accept() out of system resource)ÚmessageÚ exceptionÚsocketÚpeername)ÚrangeÚacceptrJr rr>rErDÚConnectionAbortedErrorrIÚerrnoZEMFILEZENFILEZENOBUFSZENOMEMÚcall_exception_handlerr9r;Z call_laterrZACCEPT_RETRY_DELAYrPÚ_accept_connection2Z create_task) r!rNr%r-r#rOÚ_ÚconnÚaddrÚexcr"rVrrrrM s4     z(BaseSelectorEventLoop._accept_connectionc csÔd}d}yj|ƒ}|jƒ}|r6|j||||d||d�}n|j|||||d�}y|EdHWn|jƒ‚YnXWn\tk rÎ} z@|jr¾d| dœ} |dk r¤|| d<|dk r´|| d<|j| ƒWYdd} ~ XnXdS)NT)r'r)r"r#)r'r"r#z3Error on transport creation for incoming connection)rQrRr&Ú transport)Ú create_futurer.r(r6Ú ExceptionrJrY) r!rNr\r"r-r#r&r_r'r^ÚcontextrrrrZÉs4 z)BaseSelectorEventLoop._accept_connection2c Cs@y|j|}Wntk r"YnX|jƒsX|j|j }\}}|jj ||tjB||fƒ|dk rŽ|j ƒdS)N) Ú _check_closedrÚHandlerrrÚregisterr Ú EVENT_READrAÚmodifyÚcancel) r!rÚcallbackÚargsÚhandlerÚmaskÚreaderÚwriterrrrr?ùs  z!BaseSelectorEventLoop._add_readerc Cs’|jƒr dSy|jj|ƒ}Wntk r0dSX|j|j}\}}|tjM}|sb|jj|ƒn|jj ||d|fƒ|dk rŠ|j ƒdSdSdS)NFT) r4rrrrrAr riÚ unregisterrjrk)r!rrrorprqrrrr9s z$BaseSelectorEventLoop._remove_readerc Gs’|jƒtj|||ƒ}y|jj|ƒ}Wn*tk rP|jj|tjd|fƒYn>X|j|j }\}}|jj ||tjB||fƒ|dk rŽ|j ƒdS)N) rfrrgrrrrhr Ú EVENT_WRITErArjrk) r!rrlrmrnrrorprqrrrÚ _add_writers  z!BaseSelectorEventLoop._add_writerc Cs’|jƒr dSy|jj|ƒ}Wntk r0dSX|j|j}\}}|tjM}|sb|jj|ƒn|jj |||dfƒ|dk rŠ|j ƒdSdSdS)zRemove a writer callback.FNT) r4rrrrrAr rsrrrjrk)r!rrrorprqrrrÚ_remove_writer,s z$BaseSelectorEventLoop._remove_writercGs|j|ƒ|j||f|žŽS)zAdd a reader callback.)rer?)r!rrlrmrrrÚ add_readerCs z BaseSelectorEventLoop.add_readercCs|j|ƒ|j|ƒS)zRemove a reader callback.)rer9)r!rrrrÚ remove_readerHs z#BaseSelectorEventLoop.remove_readercGs|j|ƒ|j||f|žŽS)zAdd a writer callback..)rert)r!rrlrmrrrÚ add_writerMs z BaseSelectorEventLoop.add_writercCs|j|ƒ|j|ƒS)zRemove a writer callback.)reru)r!rrrrÚ remove_writerRs z#BaseSelectorEventLoop.remove_writercCs6|jr|jƒdkrtdƒ‚|jƒ}|j|d||ƒ|S)zñReceive 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. This method is a coroutine. rzthe socket must be non-blockingN)rJÚ gettimeoutÚ ValueErrorr`Ú _sock_recv)r!r%ÚnÚfutrrrÚ sock_recvWs zBaseSelectorEventLoop.sock_recvcCsœ|dk r|j|ƒ|jƒrdSy|j|ƒ}Wn`ttfk rb|jƒ}|j||j||||ƒYn6tk rŒ}z|j |ƒWYdd}~Xn X|j |ƒdS)N) rwÚ cancelledrCrErDr;rvr|raÚ set_exceptionÚ set_result)r!r~Ú registered_fdr%r}rArr^rrrr|fs z BaseSelectorEventLoop._sock_recvcCsF|jr|jƒdkrtdƒ‚|jƒ}|r8|j|d||ƒn |jdƒ|S)a¿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. This method is a coroutine. rzthe socket must be non-blockingN)rJrzr{r`Ú _sock_sendallr‚)r!r%rAr~rrrÚ sock_sendall{s  z"BaseSelectorEventLoop.sock_sendallcCs¼|dk r|j|ƒ|jƒrdSy|j|ƒ}WnDttfk rHd}Yn*tk rp}z|j|ƒdSd}~XnX|t|ƒkrŠ|jdƒn.|rš||d…}|j ƒ}|j ||j ||||ƒdS)Nr) ryr€rHrErDrar�Úlenr‚r;rxr„)r!r~rƒr%rAr}r^rrrrr„�s"     z#BaseSelectorEventLoop._sock_sendallccs�|jr|jƒdkrtdƒ‚ttdƒ s2|jtjkrptj||j|j |d�}|j ƒsZ|EdH|j ƒd\}}}}}|j ƒ}|j |||ƒ|EdHS)zTConnect to a remote socket at address. This method is a coroutine. rzthe socket must be non-blockingÚAF_UNIX)ÚfamilyÚprotoÚloopN)rJrzr{ÚhasattrrSrˆr‡rZ_ensure_resolvedr‰ÚdoneÚresultr`Ú _sock_connect)r!r%r1Zresolvedr[r~rrrÚ sock_connect¥s z"BaseSelectorEventLoop.sock_connectcCs�|jƒ}y|j|ƒWnjttfk rV|jtj|j|ƒƒ|j||j |||ƒYn6t k r€}z|j |ƒWYdd}~Xn X|j dƒdS)N) r;ZconnectrErDZadd_done_callbackÚ functoolsÚpartialÚ_sock_connect_donerxÚ_sock_connect_cbrar�r‚)r!r~r%r1rr^rrrr޹sz#BaseSelectorEventLoop._sock_connectcCs|j|ƒdS)N)ry)r!rr~rrrr’Êsz(BaseSelectorEventLoop._sock_connect_donecCsŠ|jƒr dSy,|jtjtjƒ}|dkr6t|d|fƒ‚WnBttfk rPYn6tk rz}z|j |ƒWYdd}~Xn X|j dƒdS)NrzConnect call failed %s) r€Z getsockoptrSZ SOL_SOCKETZSO_ERRORrIrErDrar�r‚)r!r~r%r1Úerrr^rrrr“Ísz&BaseSelectorEventLoop._sock_connect_cbcCs4|jr|jƒdkrtdƒ‚|jƒ}|j|d|ƒ|S)a|Accept 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. This method is a coroutine. rzthe socket must be non-blockingF)rJrzr{r`Ú _sock_accept)r!r%r~rrrÚ sock_acceptÞs z!BaseSelectorEventLoop.sock_acceptcCs¦|jƒ}|r|j|ƒ|jƒr"dSy|jƒ\}}|jdƒWnVttfk rh|j||j|d|ƒYn:t k r’}z|j |ƒWYdd}~XnX|j ||fƒdS)NFT) r;rwr€rVr>rErDrvr•rar�r‚)r!r~Z registeredr%rr\r1r^rrrr•îs  z"BaseSelectorEventLoop._sock_acceptcCs„x~|D]v\}}|j|j}\}}|tj@rN|dk rN|jrD|j|ƒn |j|ƒ|tj@r|dk r|jrr|j|ƒq|j|ƒqWdS)N) ÚfileobjrAr riZ _cancelledr9Z _add_callbackrsru)r!Z event_listrror—rprqrrrÚ_process_eventsþs   z%BaseSelectorEventLoop._process_eventscCs|j|jƒƒ|jƒdS)N)r9r;r6)r!r%rrrÚ _stop_serving sz#BaseSelectorEventLoop._stop_serving)N)N)N)NNN)NNrL)NNrL)NN)*rÚ __module__Ú __qualname__Ú__doc__rr(r.r+r2r6r8r5rrBr@rKrPrMr rZrer?r9rtrurvrwrxryrr|r…r„r�rŽr’r“r–r•r˜r™Ú __classcell__rr)rrr+sT      ( #  cs’eZdZdZeZdZd ‡fdd„ Zdd„Zdd „Z d d „Z d d „Z dd„Z dd„Z ejr`dd„Zd!dd„Zdd„Zdd„Zdd„Zdd„Z‡ZS)"Ú_SelectorTransportéiNc sÀtƒj||ƒ||jd<|jƒ|jd<d|jkrdy|jƒ|jd<Wn tjk rbd|jd<YnX||_|jƒ|_ ||_ d|_ ||_ |j ƒ|_d|_d|_|j dk r°|j jƒ||j|j <dS)NrSZsocknamerTTrF)rrÚ_extraZ getsocknameZ getpeernamerSÚerrorÚ_sockr;Ú_sock_fdÚ _protocolÚ_protocol_connectedÚ_serverÚ_buffer_factoryÚ_bufferÚ _conn_lostÚ_closingZ_attachr )r!rŠr%r&r"r#)rrrrs&      z_SelectorTransport.__init__cCsÎ|jjg}|jdkr |jdƒn|jr0|jdƒ|jd|jƒ|jdk rÀ|jjƒ rÀt|jj |jt j ƒ}|rz|jdƒn |jdƒt|jj |jt j ƒ}|r¢d}nd}|j ƒ}|jd||fƒd d j|ƒS) NÚclosedÚclosingzfd=%sz read=pollingz read=idleÚpollingZidlezwrite=<%s, bufsize=%s>z<%s>ú )rrr¢Úappendrªr£Ú_loopr4rrr rirsÚget_write_buffer_sizeÚjoin)r!Úinfor­ÚstateÚbufsizerrrÚ__repr__2s*       z_SelectorTransport.__repr__cCs|jdƒdS)N)Ú _force_close)r!rrrÚabortNsz_SelectorTransport.abortcCs ||_dS)N)r¤)r!r&rrrÚ set_protocolQsz_SelectorTransport.set_protocolcCs|jS)N)r¤)r!rrrÚ get_protocolTsz_SelectorTransport.get_protocolcCs|jS)N)rª)r!rrrrcWsz_SelectorTransport.is_closingcCsT|jr dSd|_|jj|jƒ|jsP|jd7_|jj|jƒ|jj|jdƒdS)NTr) rªr°r9r£r¨r©ruÚ call_soonÚ_call_connection_lost)r!rrrr6Zsz_SelectorTransport.closecCs,|jdk r(tjd|t|d�|jjƒdS)Nzunclosed transport %r)Úsource)r¢ÚwarningsÚwarnÚResourceWarningr6)r!rrrÚ__del__hs  z_SelectorTransport.__del__úFatal error on transportcCsPt|tjƒr*|jjƒrBtjd||dd�n|jj||||jdœƒ|j |ƒdS)Nz%r: %sT)rG)rQrRr_r&) Ú isinstancerZ_FATAL_ERROR_IGNOREr°Ú get_debugr rrYr¤r·)r!r^rQrrrÚ _fatal_errorns   z_SelectorTransport._fatal_errorcCsd|jr dS|jr(|jjƒ|jj|jƒ|jsBd|_|jj|jƒ|jd7_|jj|j |ƒdS)NTr) r©r¨Úclearr°rur£rªr9r»r¼)r!r^rrrr·|s z_SelectorTransport._force_closec CsVz|jr|jj|ƒWd|jjƒd|_d|_d|_|j}|dk rP|jƒ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_readeri)NN)rÂ)rršr›Úmax_sizeÚ bytearrayr§r¢rr¶r¸r¹rºrcr6rZPY34rÁrÅr·r¼r±r?r�rr)rrržs"   ržcsVeZdZd‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z ‡Z S)r$Ncsrtƒj|||||ƒd|_d|_tj|jƒ|jj|j j |ƒ|jj|j |j |j ƒ|dk rn|jjtj|dƒdS)NF)rrÚ_eofÚ_pausedrZ _set_nodelayr¢r°r»r¤Úconnection_mader?r£Ú _read_readyrÚ_set_result_unless_cancelled)r!rŠr%r&r'r"r#)rrrr¢s    z!_SelectorSocketTransport.__init__cCs>|js |jrdSd|_|jj|jƒ|jjƒr:tjd|ƒdS)NTz%r pauses reading)rªrÊr°r9r£rÄr r)r!rrrÚ pause_reading¶s   z&_SelectorSocketTransport.pause_readingcCsB|js|j rdSd|_|j|j|jƒ|jjƒr>tjd|ƒdS)NFz%r resumes reading) rªrÊr?r£rÌr°rÄr r)r!rrrÚresume_reading¾s  z'_SelectorSocketTransport.resume_readingcCs´|jr dSy|jj|jƒ}WnDttfk r4Yn|tk r`}z|j|dƒWYdd}~XnPX|rt|jj |ƒn<|j j ƒrŠt j d|ƒ|jjƒ}|r¨|j j|jƒn|jƒdS)Nz$Fatal read error on socket transportz%r received EOF)r©r¢rCrÇrErDrarÅr¤Ú data_receivedr°rÄr rÚ eof_receivedr9r£r6)r!rAr^Ú keep_openrrrrÌÆs    z$_SelectorSocketTransport._read_readycCsþt|tttfƒs"tdt|ƒjƒ‚|jr0tdƒ‚|s8dS|j rf|j t j krTt j dƒ|j d7_ dS|jsæy|jj|ƒ}WnBttfk r”Yn@tk r¾}z|j|dƒdSd}~XnX||d…}|sÔdS|jj|j|jƒ|jj|ƒ|jƒdS)Nz1data argument must be a bytes-like object, not %rz%Cannot call write() after write_eof()zsocket.send() raised exception.rz%Fatal write error on socket transport)rÃÚbytesrÈÚ memoryviewÚ TypeErrorÚtyperrÉr3r©rÚ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr Úwarningr¨r¢rHrErDrarÅr°rtr£Ú _write_readyÚextendÚ_maybe_pause_protocol)r!rAr}r^rrrÚwriteÞs4     z_SelectorSocketTransport.writecCsÐ|jr dSy|jj|jƒ}Wn\ttfk r4Yn˜tk rx}z*|jj|j ƒ|jj ƒ|j |dƒWYdd}~XnTX|rŠ|jd|…=|j ƒ|jsÌ|jj|j ƒ|j r¸|jdƒn|jrÌ|jjtjƒdS)Nz%Fatal write error on socket transport)r©r¢rHr¨rErDrar°rur£rÆrÅÚ_maybe_resume_protocolrªr¼rÉÚshutdownrSÚSHUT_WR)r!r}r^rrrrÙs&   z%_SelectorSocketTransport._write_readycCs.|js |jrdSd|_|js*|jjtjƒdS)NT)rªrÉr¨r¢rÞrSrß)r!rrrÚ write_eofs  z"_SelectorSocketTransport.write_eofcCsdS)NTr)r!rrrÚ can_write_eof sz&_SelectorSocketTransport.can_write_eof)NNN) rršr›rrÎrÏrÌrÜrÙràrár�rr)rrr$ s#r$csdeZdZeZd‡fdd„ Zddd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z ‡ZS)r/NFc s¾tdkrtdƒ‚|s tj||ƒ}|ddœ} |r<| r<|| d<|j|f| Ž} tƒj|| ||| ƒd|_||_||_ ||_ d|_ |j j |d�|jjƒr¬tjd|ƒ|jjƒ} nd} |j| ƒdS)Nzstdlib ssl module not availableF)r)Zdo_handshake_on_connectr*)r-z%r starts SSL handshake)Ússlr3r Z_create_transport_contextZ wrap_socketrrr¥Ú_server_hostnameÚ_waiterÚ _sslcontextrÊr Úupdater°rÄr rÚtimeÚ _on_handshake) r!rŠr,r&r-r'r)r*r"r#Z wrap_kwargsZsslsockÚ start_time)rrrr(s*     z_SelectorSslTransport.__init__cCsD|jdkrdS|jjƒs:|dk r.|jj|ƒn |jjdƒd|_dS)N)rär€r�r‚)r!r^rrrÚ_wakeup_waiterLs   z$_SelectorSslTransport._wakeup_waiterc"Cs$y|jjƒWnÌtjk r8|jj|j|j|ƒdStjk r`|jj |j|j|ƒdSt k rÚ}z`|jj ƒrŠt j d|dd�|jj|jƒ|jj|jƒ|jjƒ|j|ƒt|tƒrÈdS‚WYdd}~XnX|jj|jƒ|jj|jƒ|jjƒ}t|jdƒ�sŽ|j�rŽ|jjtjk�rŽytj||jƒWnRtk �rŒ}z4|jj ƒ�rjt j d|dd�|jjƒ|j|ƒdSd}~XnX|jj||jjƒ|jjƒ|jd�d|_d|_ |jj|j|j!ƒd|_"|jj#|j$j%|ƒ|jj#|jƒ|jj ƒ�r |jj&ƒ|}t j'd||d ƒdS) Nz%r: SSL handshake failedT)rGZcheck_hostnamez1%r: SSL handshake failed on matching the hostname)ÚpeercertÚcipherÚ compressionZ ssl_objectFz%r: SSL handshake took %.1f msg@�@)(r¢Z do_handshakerâÚSSLWantReadErrorr°r?r£rèÚSSLWantWriteErrorrtÚ BaseExceptionrÄr rØr9rur6rêrÃraZ getpeercertr‹rårãZ verify_modeZ CERT_NONEZmatch_hostnamer rærìríÚ_read_wants_writeÚ_write_wants_readrÌr¥r»r¤rËrçr)r!rér^rëZdtrrrrèVsb                z#_SelectorSslTransport._on_handshakecCsJ|jrtdƒ‚|jrtdƒ‚d|_|jj|jƒ|jjƒrFtjd|ƒdS)Nz#Cannot pause_reading() when closingzAlready pausedTz%r pauses reading) rªr3rÊr°r9r£rÄr r)r!rrrrΕs z#_SelectorSslTransport.pause_readingcCsJ|jstdƒ‚d|_|jrdS|jj|j|jƒ|jjƒrFtj d|ƒdS)Nz Not pausedFz%r resumes reading) rÊr3rªr°r?r£rÌrÄr r)r!rrrrÏ¥s z$_SelectorSslTransport.resume_readingcCs"|jr dS|jr6d|_|jƒ|jr6|jj|j|jƒy|jj|j ƒ}Wn‚t t t j fk rdYnºt jk ržd|_|jj|jƒ|jj|j|jƒYn€tk rÊ}z|j|dƒWYdd}~XnTX|rÞ|jj|ƒn@z4|jjƒrötjd|ƒ|jjƒ}|�rtjdƒWd|jƒXdS)NFTz!Fatal read error on SSL transportz%r received EOFz?returning true from eof_received() has no effect when using ssl)r©ròrÙr¨r°rtr£r¢rCrÇrErDrârîrïrñr9rarÅr¤rÐrÄr rrÑrØr6)r!rAr^rÒrrrr̯s4   z!_SelectorSslTransport._read_readycCs(|jr dS|jrszC_SelectorDatagramTransport.get_write_buffer_size..)Úsumr¨)r!rrrr±sz0_SelectorDatagramTransport.get_write_buffer_sizecCs¤|jr dSy|jj|jƒ\}}Wnpttfk r8Ynhtk rd}z|jj|ƒWYdd}~Xn<t k r�}z|j |dƒWYdd}~XnX|jj ||ƒdS)Nz&Fatal read error on datagram transport) r©r¢ZrecvfromrÇrErDrIr¤Úerror_receivedrarÅZdatagram_received)r!rAr]r^rrrrÌ sz&_SelectorDatagramTransport._read_readycCsTt|tttfƒs"tdt|ƒjƒ‚|s*dS|jrN|d|jfkrNtd|jfƒ‚|j r‚|jr‚|j t j krpt j dƒ|j d7_ dS|j�s4y&|jr |jj|ƒn|jj||ƒdSttfk rÚ|jj|j|jƒYnZtk �r}z|jj|ƒdSd}~Xn.tk �r2}z|j|dƒdSd}~XnX|jjt|ƒ|fƒ|jƒdS)Nz1data argument must be a bytes-like object, not %rz#Invalid address: must be None or %szsocket.send() raised exception.rz'Fatal write error on datagram transport)rÃrÓrÈrÔrÕrÖrrór{r©rr×r rØr¨r¢rHÚsendtorErDr°rtr£Ú _sendto_readyrIr¤r÷rarÅr¯rÛ)r!rAr]r^rrrrø.s<     z!_SelectorDatagramTransport.sendtocCsðx¾|jr¾|jjƒ\}}y&|jr,|jj|ƒn|jj||ƒWqttfk rf|jj||fƒPYqt k r�}z|j j |ƒdSd}~Xqt k rº}z|j |dƒdSd}~XqXqW|jƒ|jsì|jj|jƒ|jrì|jdƒdS)Nz'Fatal write error on datagram transport)r¨Úpopleftrór¢rHrørErDÚ appendleftrIr¤r÷rarÅrÝr°rur£rªr¼)r!rAr]r^rrrrùUs* z(_SelectorDatagramTransport._sendto_ready)NNN)N) rršr›Ú collectionsÚdequer§rr±rÌrørùr�rr)rrr0 s  'r0) rœÚ__all__rürXr�rSr¾rrâÚ ImportErrorÚrrrrrr r r Z coroutinesr Úlogr rZ BaseEventLooprZ_FlowControlMixinZ Transportržr$r/r0rrrrÚsD             ii