PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  oY @sdgZddlZddlZddlZddlZddlZddlZyddlZWnek r{dZYnXddl m Z ddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd lmZdd lmZddZeedrFddZn ddZGddde jZGdddejejZGdddeZGdddeZGdddeZ dS)BaseSelectorEventLoopN) base_events)compat) constants)events)futures) selectors) transports)sslproto) coroutine)loggerc CsAy|j|}Wntk r+dSYnXt|j|@SdS)NF)get_keyKeyErrorboolr)selectorfdeventkeyr./opt/python35/lib/python3.5/selector_events.py_test_selector_event s   r TCP_NODELAYcCs\|jtjtjhkrX|jtjkrX|jtjkrX|jtjtj ddS)Nr) familysocketAF_INETAF_INET6type SOCK_STREAMproto IPPROTO_TCP setsockoptr)sockrrr _set_nodelay,sr#cCsdS)Nr)r"rrrr#2sc s>eZdZdfddZdddddddZddd d dddddd d Zdd d dddddd dZdddddZfddZddZ ddZ ddZ ddZ ddZ ddZdddd d!Zdddd"d#Zeddd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zd<d=Zd>d?Zed@dAZ dBdCZ!dDdEZ"dFdGZ#dHdIZ$dJdKZ%dLdMZ&dNdOZ'S)PrNcsatj|dkr%tj}tjd|jj||_|j t j |_ dS)NzUsing selector: %s) super__init__r DefaultSelectorr debug __class____name__ _selector_make_self_pipeweakrefWeakValueDictionary _transports)selfr)r(rrr%<s     zBaseSelectorEventLoop.__init__extraservercCst||||||S)N)_SelectorSocketTransport)r/r"protocolwaiterr0r1rrr_make_socket_transportFsz,BaseSelectorEventLoop._make_socket_transport server_sideFserver_hostnamec Cs{tjs:|j||||d|d|d|d|Stj||||||} t||| d|d|| jS)Nr6r7r0r1)r Z_is_sslproto_available_make_legacy_ssl_transportZ SSLProtocolr2Z_app_transport) r/rawsockr3 sslcontextr4r6r7r0r1Z ssl_protocolrrr_make_ssl_transportKs     z)BaseSelectorEventLoop._make_ssl_transportc Cs"t||||||||| S)N)_SelectorSslTransport) r/r9r3r:r4r6r7r0r1rrrr8Zsz0BaseSelectorEventLoop._make_legacy_ssl_transportcCst||||||S)N)_SelectorDatagramTransport)r/r"r3addressr4r0rrr_make_datagram_transportds z.BaseSelectorEventLoop._make_datagram_transportcsh|jrtd|jr(dS|jtj|jdk rd|jjd|_dS)Nz!Cannot close a running event loop)Z is_running RuntimeError is_closed_close_self_piper$closer*)r/)r(rrrCis      zBaseSelectorEventLoop.closecCs tdS)N)NotImplementedError)r/rrr _socketpairtsz!BaseSelectorEventLoop._socketpaircCsU|j|jj|jjd|_|jjd|_|jd8_dS)Nr)_remove_reader_ssockfilenorC_csock _internal_fds)r/rrrrBws     z&BaseSelectorEventLoop._close_self_pipecCsg|j\|_|_|jjd|jjd|jd7_|j|jj|jdS)NFr)rErGrI setblockingrJ _add_readerrH_read_from_self)r/rrrr+s z%BaseSelectorEventLoop._make_self_pipecCsdS)Nr)r/datarrr_process_self_datasz(BaseSelectorEventLoop._process_self_datac Cs_xXy*|jjd}|sP|j|Wqtk rDwYqtk rVPYqXqWdS)Ni)rGrecvrOInterruptedErrorBlockingIOError)r/rNrrrrMs  z%BaseSelectorEventLoop._read_from_selfc Cs[|j}|dk rWy|jdWn.tk rV|jrRtjdddYnXdS)Nsz3Fail to write a null byte into the self-pipe socketexc_infoT)rIsendOSError_debugr r')r/Zcsockrrr_write_to_selfs     z$BaseSelectorEventLoop._write_to_selfdcCs,|j|j|j|||||dS)N)rLrH_accept_connection)r/protocol_factoryr"r:r1backlogrrr_start_servingsz$BaseSelectorEventLoop._start_servingc Cs[xTt|D]F}yB|j\}}|jrGtjd||||jdWntttfk rvdSYq t k r} z| j t j t j t j t jfkr |jddd| d|i|j|j|jtj|j|||||nWYdd} ~ Xq Xd|i} |j||| ||} |j| q WdS)Nz#%r got a new connection from %r: %rFmessagez&socket.accept() out of system resource exceptionrpeername)rangeacceptrVr r'rKrRrQConnectionAbortedErrorrUerrnoZEMFILEZENFILEZENOBUFSZENOMEMcall_exception_handlerrFrHZ call_laterrZACCEPT_RETRY_DELAYr\_accept_connection2Z create_task) r/rZr"r:r1r[_connaddrexcr0rarrrrYs4         z(BaseSelectorEventLoop._accept_connectionc cs$d}d}y|}|j}|rZ|j|||d|ddd|d|}n$|j||d|d|d|}y |EdHWn|jYnXWnytk r} zY|jr ddd| i} |dk r|| d <|dk r|| d <|j| WYdd} ~ XnXdS) Nr4r6Tr0r1r]z3Error on transport creation for incoming connectionr^r3 transport) create_futurer;r5rC ExceptionrVrd) r/rZrgr0r:r1r3rjr4ricontextrrrres4            z)BaseSelectorEventLoop._accept_connection2c CsNy|j|}Wntk r%Yn%X|jsJtdj||dS)Nz.File descriptor {!r} is used by transport {!r})r.r is_closingr@format)r/rrjrrr_ensure_fd_no_transports  z-BaseSelectorEventLoop._ensure_fd_no_transportc Gs|jtj|||}y|jj|}Wn1tk rh|jj|tj|dfYnSX|j|j }\}}|jj ||tjB||f|dk r|j dS)N) _check_closedrHandler*rrregisterr EVENT_READrNmodifycancel) r/rcallbackargshandlermaskreaderwriterrrrrLs    z!BaseSelectorEventLoop._add_readerc Cs|jrdSy|jj|}Wntk r>dSYn{X|j|j}\}}|tjM}|s|jj|n|jj ||d|f|dk r|j dSdSdS)NFT) rAr*rrrrNr rt unregisterrurv)r/rrrzr{r|rrrrFs     z$BaseSelectorEventLoop._remove_readerc Gs|jtj|||}y|jj|}Wn1tk rh|jj|tjd|fYnSX|j|j }\}}|jj ||tjB||f|dk r|j dS)N) rqrrrr*rrrsr EVENT_WRITErNrurv) r/rrwrxryrrzr{r|rrr _add_writer(s    z!BaseSelectorEventLoop._add_writerc Cs|jrdSy|jj|}Wntk r>dSYn{X|j|j}\}}|tjM}|s|jj|n|jj |||df|dk r|j dSdSdS)NFT) rAr*rrrrNr r~r}rurv)r/rrrzr{r|rrr_remove_writer7s     z$BaseSelectorEventLoop._remove_writercGs |j||j|||S)N)rprL)r/rrwrxrrr add_readerNs z BaseSelectorEventLoop.add_readercCs|j||j|S)N)rprF)r/rrrr remove_readerSs z#BaseSelectorEventLoop.remove_readercGs |j||j|||S)N)rpr)r/rrwrxrrr add_writerXs z BaseSelectorEventLoop.add_writercCs|j||j|S)N)rpr)r/rrrr remove_writer]s z#BaseSelectorEventLoop.remove_writercCsM|jr'|jdkr'td|j}|j|d|||S)Nrzthe socket must be non-blockingF)rV gettimeout ValueErrorrk _sock_recv)r/r"nfutrrr sock_recvbs   zBaseSelectorEventLoop.sock_recvcCs|j}|r|j||jr/dSy|j|}Wnhttfk r{|j||j|d||Yn?tk r}z|j |WYdd}~XnX|j |dS)NT) rHr cancelledrPrRrQrrrl set_exception set_result)r/r registeredr"rrrNrirrrrqs   # z BaseSelectorEventLoop._sock_recvcCsc|jr'|jdkr'td|j}|rR|j|d||n |jd|S)Nrzthe socket must be non-blockingF)rVrrrk _sock_sendallr)r/r"rNrrrr sock_sendalls    z"BaseSelectorEventLoop.sock_sendallcCs|j}|r|j||jr/dSy|j|}WnSttfk rbd}Yn6tk r}z|j|dSWYdd}~XnX|t|kr|j dn5|r||d}|j ||j |d||dS)NrT) rHrrrTrRrQrlrlenrrr)r/rrr"rNrrrirrrrs"     z#BaseSelectorEventLoop._sock_sendallccs|jr'|jdkr'tdttd sI|jtjkrtj|d|jd|j d|}|j s|EdH|j d\}}}}}|j }|j ||||EdHS)Nrzthe socket must be non-blockingAF_UNIXrrloop)rVrrhasattrrrrrZ_ensure_resolvedrdoneresultrk _sock_connect)r/r"r>Zresolvedrfrrrr sock_connects "!   z"BaseSelectorEventLoop.sock_connectcCs|j}y|j|Wnttfk ro|jtj|j||j||j |||Yn?t k r}z|j |WYdd}~XnX|j ddS)N) rHconnectrRrQadd_done_callback functoolspartial_sock_connect_doner_sock_connect_cbrlrr)r/rr"r>rrirrrrs   z#BaseSelectorEventLoop._sock_connectcCs|j|dS)N)r)r/rrrrrrsz(BaseSelectorEventLoop._sock_connect_donecCs|jrdSy>|jtjtj}|dkrMt|d|fWnIttfk rhYn?tk r}z|j |WYdd}~XnX|j ddS)NrzConnect call failed %s) r getsockoptr SOL_SOCKETSO_ERRORrUrRrQrlrr)r/rr"r>errrirrrrs   z&BaseSelectorEventLoop._sock_connect_cbcCsJ|jr'|jdkr'td|j}|j|d||S)Nrzthe socket must be non-blockingF)rVrrrk _sock_accept)r/r"rrrr sock_accepts   z!BaseSelectorEventLoop.sock_acceptcCs|j}|r|j||jr/dSy#|j\}}|jdWnettfk r|j||j|d|YnEt k r}z|j |WYdd}~XnX|j ||fdS)NFT) rHrrrarKrRrQrrrlrr)r/rrr"rrgr>rirrrrs     z"BaseSelectorEventLoop._sock_acceptcCsx|D]\}}|j|j}\}}|tj@rk|dk rk|jr^|j|n |j||tj@r|dk r|jr|j|q|j|qWdS)N) fileobjrNr rtZ _cancelledrFZ _add_callbackr~r)r/Z event_listrrzrr{r|rrr_process_events s   z%BaseSelectorEventLoop._process_eventscCs!|j|j|jdS)N)rFrHrC)r/r"rrr _stop_servingsz#BaseSelectorEventLoop._stop_serving)(r) __module__ __qualname__r%r5r;r8r?rCrErBr+rOrMrWr\rYr rerprLrFrrrrrrrrrrrrrrrrrrrr)r(rr6sT          (#                  cseZdZdZeZdZddfddZddZdd Z d d Z d d Z ddZ ddZ ejrddZdddZddZddZddZS)_SelectorTransportiNc stj||||jd<|j|jdz<%s> )r(r)rappendrr_looprArr*r rtr~get_write_buffer_sizejoin)r/inforstatebufsizerrr__repr__>s*        z_SelectorTransport.__repr__cCs|jddS)N) _force_close)r/rrrabortZsz_SelectorTransport.abortcCs ||_dS)N)r)r/r3rrr set_protocol]sz_SelectorTransport.set_protocolcCs|jS)N)r)r/rrr get_protocol`sz_SelectorTransport.get_protocolcCs|jS)N)r)r/rrrrncsz_SelectorTransport.is_closingcCsn|jr dSd|_|jj|j|jsj|jd7_|jj|j|jj|jddS)NTr) rrrFrrrr call_soon_call_connection_lost)r/rrrrCfs   z_SelectorTransport.closecCs4|jdk r0tjd|t|jjdS)Nzunclosed transport %r)rwarningswarnResourceWarningrC)r/rrr__del__tsz_SelectorTransport.__del__zFatal error on transportc Csyt|tjr=|jjrhtjd||ddn+|jjd|d|d|d|ji|j |dS)Nz%r: %srSTr]r^rjr3) isinstancerZ_FATAL_ERROR_IGNOREr get_debugr r'rdrr)r/rir]rrr _fatal_errorys z_SelectorTransport._fatal_errorcCs|jr dS|jr6|jj|jj|j|js[d|_|jj|j|jd7_|jj|j |dS)NTr) rrclearrrrrrFrr)r/rirrrrs     z_SelectorTransport._force_closec Csuz|jr|jj|Wd|jjd|_d|_d|_|j}|dk rp|jd|_XdS)N)rrZconnection_lostrrCrrZ_detach)r/rir1rrrrs        z(_SelectorTransport._call_connection_lostcCs t|jS)N)rr)r/rrrrsz(_SelectorTransport.get_write_buffer_sizei)r)rrmax_size bytearrayrrr%rrrrrnrCrZPY34rrrrrrr)r(rrs         rcseZdZdddfddZddZddZdd Zd d Zd d ZddZ ddZ S)r2Ncstj|||||d|_d|_t|j|jj|jj ||jj|jj |j |j |dk r|jjt j|ddS)NF)r$r%_eof_pausedr#rrrrconnection_maderLr _read_readyr_set_result_unless_cancelled)r/rr"r3r4r0r1)r(rrr%s    z!_SelectorSocketTransport.__init__cCsi|jrtd|jr*tdd|_|jj|j|jjretjd|dS)Nz#Cannot pause_reading() when closingzAlready pausedTz%r pauses reading) rr@rrrFrrr r')r/rrr pause_readings     z&_SelectorSocketTransport.pause_readingcCsg|jstdd|_|jr+dS|jj|j|j|jjrctj d|dS)Nz Not pausedFz%r resumes reading) rr@rrrLrrrr r')r/rrrresume_readings    z'_SelectorSocketTransport.resume_readingcCs|jr dSy|jj|j}WnLttfk r@Yntk rt}z|j|dWYdd}~XnnX|r|jj |nT|j j rt j d||jj}|r|j j|jn |jdS)Nz$Fatal read error on socket transportz%r received EOF)rrrPrrRrQrlrr data_receivedrrr r' eof_receivedrFrrC)r/rNri keep_openrrrrs  #z$_SelectorSocketTransport._read_readycCsNt|tttfs1tdt|j|jrFtd|sPdS|j r|j t j krxt j d|j d7_ dS|js0y|jj|}WnPttfk rYnStk r}z|j|ddSWYdd}~XnX||d}|sdS|jj|j|j|jj||jdS)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)rbytesr memoryview TypeErrorrr)rr@rr!LOG_THRESHOLD_FOR_CONNLOST_WRITESr warningrrrTrRrQrlrrrr _write_readyextend_maybe_pause_protocol)r/rNrrirrrwrites4     z_SelectorSocketTransport.writecCs |jr dSy|jj|j}Wnlttfk r@Yntk r}z5|jj|j |jj |j |dWYdd}~XnrX|r|jd|=|j |js|jj|j |j r|jdn|jr|jjtjdS)Nz%Fatal write error on socket transport)rrrTrrRrQrlrrrrr_maybe_resume_protocolrrrshutdownrSHUT_WR)r/rrirrrr s&  #    z%_SelectorSocketTransport._write_readycCs6|jr dSd|_|js2|jjtjdS)NT)rrrrrr)r/rrr write_eof"s    z"_SelectorSocketTransport.write_eofcCsdS)NTr)r/rrr can_write_eof)sz&_SelectorSocketTransport.can_write_eof) r)rrr%rrrrrrrrr)r(rr2s   #  r2cseZdZeZdddddfddZdddZddZd d Zd d Z d dZ ddZ ddZ ddZ S)r<NFc stdkrtd|s0tj||}d|ddi} |rY| rY|| d<|j|| } tj|| ||| d|_||_||_ ||_ d|_ |j j d||jjrtjd||jj} nd} |j| dS)Nzstdlib ssl module not availabler6Zdo_handshake_on_connectFr7r:z%r starts SSL handshake)sslr@r Z_create_transport_contextZ wrap_socketr$r%r_server_hostname_waiter _sslcontextrrupdaterrr r'time _on_handshake) r/rr9r3r:r4r6r7r0r1Z wrap_kwargsZsslsock start_time)r(rrr%1s*          z_SelectorSslTransport.__init__cCs^|jdkrdS|jjsQ|dk rA|jj|n|jjdd|_dS)N)rrrr)r/rirrr_wakeup_waiterUs z$_SelectorSslTransport._wakeup_waiterc%Csy|jjWntjk rH|jj|j|j|dSYntjk r||jj |j|j|dSYnt k r}z|jj rt j d|dd|jj|j|jj|j|jj|j|t|trdSWYdd}~XnX|jj|j|jj|j|jj}t|jds|jr|jjtjkrytj||jWnhtk r}zH|jj rt j d|dd|jj|j|dSWYdd}~XnX|jjd|d|jjd|jjd |jd |_d |_ |jj|j|j!d|_"|jj#|j$j%||jj#|j|jj r|jj&|}t j'd ||d dS) Nz%r: SSL handshake failedrSTZcheck_hostnamez1%r: SSL handshake failed on matching the hostnamepeercertcipher compressionZ ssl_objectFz%r: SSL handshake took %.1f msg@@)(rZ do_handshakerSSLWantReadErrorrrLrrSSLWantWriteErrorr BaseExceptionrr rrFrrCrrrlZ getpeercertrrrZ verify_modeZ CERT_NONEZmatch_hostnamerrrr_read_wants_write_write_wants_readrrrrrrr')r/rrirZdtrrrr_sb               z#_SelectorSslTransport._on_handshakecCsi|jrtd|jr*tdd|_|jj|j|jjretjd|dS)Nz#Cannot pause_reading() when closingzAlready pausedTz%r pauses reading) rr@rrrFrrr r')r/rrrrs     z#_SelectorSslTransport.pause_readingcCsg|jstdd|_|jr+dS|jj|j|j|jjrctj d|dS)Nz Not pausedFz%r resumes reading) rr@rrrLrrrr r')r/rrrrs    z$_SelectorSslTransport.resume_readingcCsr|jr dS|jrKd|_|j|jrK|jj|j|jy|jj|j }Wnt t t j fk rYnt jk rd|_|jj|j|jj|j|jYntk r}z|j|dWYdd}~XnmX|r|jj|nSzE|jjr=tjd||jj}|r_tjdWd|jXdS)NFTz!Fatal read error on SSL transportz%r received EOFz?returning true from eof_received() has no effect when using ssl)rrrrrrrrrPrrRrQrrrrrFrlrrrrr r'rrrC)r/rNrirrrrrs4      #z!_SelectorSslTransport._read_readycCs|jr dS|jrTd|_|j|jp8|jsT|jj|j|j|jrAy|j j |j}Wnt t t jfk rd}Ynt jk rd}|jj|jd|_YnYtk r*}z9|jj|j|jj|j|ddSWYdd}~XnX|rA|jd|=|j|js}|jj|j|jr}|jddS)NFrTz"Fatal write error on SSL transport)rrrrrrrLrrrrTrRrQrrrrrrlrrrr)r/rrirrrrs8           z"_SelectorSslTransport._write_readycCst|tttfs1tdt|j|s;dS|jrv|jtj krct j d|jd7_dS|j s|j j|j|j|j j||jdS)Nz1data argument must be a bytes-like object, not %rzsocket.send() raised exception.r)rrrrrrr)rrrr rrrrrrrr)r/rNrrrrs   z_SelectorSslTransport.writecCsdS)NFr)r/rrrrsz#_SelectorSslTransport.can_write_eof)r)rrrrr%rrrrrrrrrr)r(rr<-s " ?  " # r<csgeZdZejZdddfddZddZddZddd Z d d Z S) r=Ncstj||||||_|jj|jj||jj|jj|j|j |dk r|jjt j |ddS)N) r$r%_addressrrrrrLrrrr)r/rr"r3r>r4r0)r(rrr%s  z#_SelectorDatagramTransport.__init__cCstdd|jDS)Ncss!|]\}}t|VqdS)N)r).0rNrfrrr 'szC_SelectorDatagramTransport.get_write_buffer_size..)sumr)r/rrrr&sz0_SelectorDatagramTransport.get_write_buffer_sizecCs|jr dSy|jj|j\}}Wnttfk rFYn|tk rz}z|jj|WYdd}~XnHt k r}z|j |dWYdd}~XnX|jj ||dS)Nz&Fatal read error on datagram transport) rrrecvfromrrRrQrUrerror_receivedrlrZdatagram_received)r/rNrhrirrrr)s "#z&_SelectorDatagramTransport._read_readycCst|tttfs1tdt|j|s;dS|jro|d|jfkrotd|jf|j r|jr|j t j krt j d|j d7_ dS|jsy7|jr|jj|n|jj||dSWnttfk r&|jj|j|jYnqtk r^}z|jj|dSWYdd}~Xn9tk r}z|j|ddSWYdd}~XnX|jjt||f|jdS)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)rrrrrrr)rrrrrr rrrrTsendtorRrQrrr _sendto_readyrUrrrlrrr)r/rNrhrirrrr7s<    z!_SelectorDatagramTransport.sendtocCs:x|jr|jj\}}y3|jr@|jj|n|jj||Wqttfk r|jj||fPYqt k r}z|j j |dSWYdd}~Xqt k r}z|j |ddSWYdd}~XqXqW|j|js6|jj|j|jr6|jddS)Nz'Fatal write error on datagram transport)rpopleftrrrTrrRrQ appendleftrUrrrlrrrrrrr)r/rNrhrirrrr^s*      z(_SelectorDatagramTransport._sendto_ready) r)rr collectionsdequerr%rrrrrr)r(rr=s    'r=)!__all__rrcrrrr,r ImportErrorrrrrrr r r Z coroutinesr logr rrr#Z BaseEventLooprZ_FlowControlMixinZ Transportrr2r<r=rrrrs>