3 \¨¢ã @s8dgZddlZddlZddlZddlZddlZddlZy ddlZWnek rZdZYnXddl m Z ddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd lmZdd lmZdd„ZGdd„de jƒZGdd„dejejƒZGdd„deƒZGdd„deƒZGdd„deƒZdS)Ú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 rcsneZdZdN‡fdd„ ZdOdddœdd„ZdPdddddœd d „Zdddddœd d „ZdQd d„Z‡fdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„ZdRdd„ZdSd d!„ZedTd"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'‡Z(S)UrNcsFtƒ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)NFT) r4rrrrrAr rsrrrjrk)r!rrrorprqrrrÚ_remove_writer,s z$BaseSelectorEventLoop._remove_writercGs|j|ƒ|j||f|žŽS)N)rer?)r!rrlrmrrrÚ add_readerCs z BaseSelectorEventLoop.add_readercCs|j|ƒ|j|ƒS)N)rer9)r!rrrrÚ remove_readerHs z#BaseSelectorEventLoop.remove_readercGs|j|ƒ|j||f|žŽS)N)rert)r!rrlrmrrrÚ add_writerMs z BaseSelectorEventLoop.add_writercCs|j|ƒ|j|ƒS)N)reru)r!rrrrÚ remove_writerRs z#BaseSelectorEventLoop.remove_writercCs6|jr|jƒdkrtdƒ‚|jƒ}|j|d||ƒ|S)Nrzthe socket must be non-blocking)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)Nrzthe socket must be non-blocking)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)Nrzthe socket must be non-blockingÚAF_UNIX)ÚfamilyÚprotoÚloop)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)Nrzthe 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__rr(r.r+r2r6r8r5rrBr@rKrPrMr rZrer?r9rtrurvrwrxryrr|r…r„r�rŽr’r“r–r•r˜r™Ú __classcell__rr)rrr+sR      ( #  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)Ú__all__rûrXr�rSr½rráÚ ImportErrorÚrrrrrr r r Z coroutinesr Úlogr rZ BaseEventLooprZ_FlowControlMixinZ Transportr�r$r/r0rrrrÚsB             ii