<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3

  \                 @   s8  d gZ ddlZddlZddlZddlZddlZddlZyddlZW n ek
rZ   dZY nX ddl	m
Z
 ddl	mZ ddl	mZ ddl	mZ ddl	mZ dd	l	mZ dd
l	mZ ddl	mZ ddlmZ ddlmZ dd ZG dd  d e
jZG dd dejejZG dd deZG dd deZG dd deZdS )BaseSelectorEventLoop    N   )base_events)compat)	constants)events)futures)	selectors)
transports)sslproto)	coroutine)loggerc             C   s6   y| j |}W n tk
r"   dS X t|j|@ S d S )NF)get_keyKeyErrorboolr   )selectorfdZeventkey r   //usr/lib64/python3.6/asyncio/selector_events.py_test_selector_event    s
    r   c                   sn  e Zd ZdN fdd	ZdOdddddZdPdddddd	d
ZdddddddZdQddZ fddZdd Z	dd Z
dd Zdd Zdd Zdd ZdRddZdSd d!ZedTd"d#Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zed>d? Z d@dA Z!dBdC Z"dDdE Z#dFdG Z$dHdI Z%dJdK Z&dLdM Z'  Z(S )Ur   Nc                sF   t  j  |d krtj }tjd|jj || _| j	  t
j | _d S )NzUsing selector: %s)super__init__r	   ZDefaultSelectorr   debug	__class____name__	_selector_make_self_pipeweakrefWeakValueDictionary_transports)selfr   )r   r   r   r   1   s    
zBaseSelectorEventLoop.__init__)extraserverc            C   s   t | |||||S )N)_SelectorSocketTransport)r!   sockprotocolwaiterr"   r#   r   r   r   _make_socket_transport;   s    
z,BaseSelectorEventLoop._make_socket_transportF)server_sideserver_hostnamer"   r#   c      
   
   C   sN   t j s"| j||||||||dS t j| |||||}	t| ||	||d |	jS )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_protocolr   r   r   _make_ssl_transport@   s    

z)BaseSelectorEventLoop._make_ssl_transportc      	   
   C   s   t | ||||||||	S )N)_SelectorSslTransport)	r!   r,   r&   r-   r'   r)   r*   r"   r#   r   r   r   r+   O   s    
z0BaseSelectorEventLoop._make_legacy_ssl_transportc             C   s   t | |||||S )N)_SelectorDatagramTransport)r!   r%   r&   addressr'   r"   r   r   r   _make_datagram_transportY   s    z.BaseSelectorEventLoop._make_datagram_transportc                sL   | j  rtd| j rd S | j  t j  | jd k	rH| jj  d | _d S )Nz!Cannot close a running event loop)Z
is_runningRuntimeError	is_closed_close_self_piper   closer   )r!   )r   r   r   r6   ^   s    


zBaseSelectorEventLoop.closec             C   s   t d S )N)NotImplementedError)r!   r   r   r   _socketpairi   s    z!BaseSelectorEventLoop._socketpairc             C   sB   | j | jj  | jj  d | _| jj  d | _|  jd8  _d S )Nr   )_remove_reader_ssockfilenor6   _csock_internal_fds)r!   r   r   r   r5   l   s    

z&BaseSelectorEventLoop._close_self_pipec             C   sN   | j  \| _| _| jjd | jjd |  jd7  _| j| jj | j d S )NFr   )r8   r:   r<   setblockingr=   _add_readerr;   _read_from_self)r!   r   r   r   r   t   s
    z%BaseSelectorEventLoop._make_self_pipec             C   s   d S )Nr   )r!   datar   r   r   _process_self_data|   s    z(BaseSelectorEventLoop._process_self_datac             C   sV   xPy | j jd}|sP | j| W q tk
r8   wY q tk
rL   P Y qX qW d S )Ni   )r:   recvrB   InterruptedErrorBlockingIOError)r!   rA   r   r   r   r@      s    z%BaseSelectorEventLoop._read_from_selfc             C   sJ   | j }|d k	rFy|jd W n( tk
rD   | jr@tjddd Y nX d S )N    z3Fail to write a null byte into the self-pipe socketT)exc_info)r<   sendOSError_debugr   r   )r!   Zcsockr   r   r   _write_to_self   s    z$BaseSelectorEventLoop._write_to_selfd   c             C   s    | j |j | j||||| d S )N)r?   r;   _accept_connection)r!   protocol_factoryr%   r-   r#   backlogr   r   r   _start_serving   s    z$BaseSelectorEventLoop._start_servingc             C   s   xt |D ]}y0|j \}}| jr2tjd||| |jd W n tttfk
rX   d S  t	k
r }	 z^|	j
t
jt
jt
jt
jfkr| jd|	|d | j|j  | jtj| j||||| n W Y d d }	~	X q
X d|i}
| j|||
||}| j| q
W d S )Nz#%r got a new connection from %r: %rFz&socket.accept() out of system resource)message	exceptionsocketpeername)rangeacceptrJ   r   r   r>   rE   rD   ConnectionAbortedErrorrI   errnoZEMFILEZENFILEZENOBUFSZENOMEMcall_exception_handlerr9   r;   Z
call_laterr   ZACCEPT_RETRY_DELAYrP   _accept_connection2Zcreate_task)r!   rN   r%   r-   r#   rO   _connaddrexcr"   rV   r   r   r   rM      s4    


z(BaseSelectorEventLoop._accept_connectionc             c   s   d }d }yj| }| j  }|r6| j||||d||d}n| j|||||d}y|E d H  W n   |j   Y nX W n\ tk
r }	 z@| jrd|	d}
|d k	r||
d< |d k	r||
d< | j|
 W Y d d }	~	X nX d S )NT)r'   r)   r"   r#   )r'   r"   r#   z3Error on transport creation for incoming connection)rQ   rR   r&   	transport)create_futurer.   r(   r6   	ExceptionrJ   rY   )r!   rN   r\   r"   r-   r#   r&   r_   r'   r^   contextr   r   r   rZ      s4    z)BaseSelectorEventLoop._accept_connection2c             C   s@   y| j | }W n tk
r"   Y nX |j s<tdj||d S )Nz.File descriptor {!r} is used by transport {!r})r    r   
is_closingr3   format)r!   r   r_   r   r   r   _ensure_fd_no_transport   s    z-BaseSelectorEventLoop._ensure_fd_no_transportc       	      G   s   | j   tj||| }y| jj|}W n* tk
rP   | jj|tj|d f Y n>X |j|j	 }\}}| jj
||tjB ||f |d k	r|j  d S )N)_check_closedr   Handler   r   r   registerr	   
EVENT_READrA   modifycancel)	r!   r   callbackargshandler   maskreaderwriterr   r   r   r?      s    
z!BaseSelectorEventLoop._add_readerc             C   s   | j  rdS y| jj|}W n tk
r0   dS X |j|j }\}}|tj M }|sb| jj| n| jj	||d |f |d k	r|j
  dS dS d S )NFT)r4   r   r   r   r   rA   r	   ri   
unregisterrj   rk   )r!   r   r   ro   rp   rq   r   r   r   r9     s    z$BaseSelectorEventLoop._remove_readerc       	      G   s   | j   tj||| }y| jj|}W n* tk
rP   | jj|tjd |f Y n>X |j|j	 }\}}| jj
||tjB ||f |d k	r|j  d S )N)rf   r   rg   r   r   r   rh   r	   EVENT_WRITErA   rj   rk   )	r!   r   rl   rm   rn   r   ro   rp   rq   r   r   r   _add_writer  s    
z!BaseSelectorEventLoop._add_writerc             C   s   | j  rdS y| jj|}W n tk
r0   dS X |j|j }\}}|tj M }|sb| jj| n| jj	|||d f |d k	r|j
  dS dS d S )NFT)r4   r   r   r   r   rA   r	   rs   rr   rj   rk   )r!   r   r   ro   rp   rq   r   r   r   _remove_writer,  s    z$BaseSelectorEventLoop._remove_writerc             G   s   | j | | j||f| S )N)re   r?   )r!   r   rl   rm   r   r   r   
add_readerC  s    
z BaseSelectorEventLoop.add_readerc             C   s   | j | | j|S )N)re   r9   )r!   r   r   r   r   remove_readerH  s    
z#BaseSelectorEventLoop.remove_readerc             G   s   | j | | j||f| S )N)re   rt   )r!   r   rl   rm   r   r   r   
add_writerM  s    
z BaseSelectorEventLoop.add_writerc             C   s   | j | | j|S )N)re   ru   )r!   r   r   r   r   remove_writerR  s    
z#BaseSelectorEventLoop.remove_writerc             C   s6   | j r|j dkrtd| j }| j|d || |S )Nr   zthe socket must be non-blocking)rJ   
gettimeout
ValueErrorr`   
_sock_recv)r!   r%   nfutr   r   r   	sock_recvW  s
    	zBaseSelectorEventLoop.sock_recvc             C   s   |d k	r| j | |j rd S y|j|}W n` ttfk
rb   |j }| j|| j|||| Y n6 tk
r } z|j	| W Y d d }~X nX |j
| d S )N)rw   	cancelledrC   rE   rD   r;   rv   r|   ra   set_exception
set_result)r!   r~   registered_fdr%   r}   rA   r   r^   r   r   r   r|   f  s    
z BaseSelectorEventLoop._sock_recvc             C   sF   | j r|j dkrtd| j }|r8| j|d || n
|jd  |S )Nr   zthe socket must be non-blocking)rJ   rz   r{   r`   _sock_sendallr   )r!   r%   rA   r~   r   r   r   sock_sendall{  s    
z"BaseSelectorEventLoop.sock_sendallc             C   s   |d k	r| j | |j rd S y|j|}W nD ttfk
rH   d}Y n* tk
rp } z|j| d S d }~X nX |t|kr|jd  n.|r||d  }|j	 }| j
|| j|||| d S )Nr   )ry   r   rH   rE   rD   ra   r   lenr   r;   rx   r   )r!   r~   r   r%   rA   r}   r^   r   r   r   r   r     s"    

z#BaseSelectorEventLoop._sock_sendallc             c   s   | j r|j dkrtdttd s2|jtjkrptj||j|j	| d}|j
 sZ|E d H  |j d \}}}}}| j }| j||| |E d H S )Nr   zthe socket must be non-blockingAF_UNIX)familyprotoloop)rJ   rz   r{   hasattrrS   r   r   r   Z_ensure_resolvedr   doneresultr`   _sock_connect)r!   r%   r1   Zresolvedr[   r~   r   r   r   sock_connect  s    
z"BaseSelectorEventLoop.sock_connectc             C   s   |j  }y|j| W nj ttfk
rV   |jtj| j| | j|| j	||| Y n6 t
k
r } z|j| W Y d d }~X nX |jd  d S )N)r;   ZconnectrE   rD   Zadd_done_callback	functoolspartial_sock_connect_donerx   _sock_connect_cbra   r   r   )r!   r~   r%   r1   r   r^   r   r   r   r     s    z#BaseSelectorEventLoop._sock_connectc             C   s   | j | d S )N)ry   )r!   r   r~   r   r   r   r     s    z(BaseSelectorEventLoop._sock_connect_donec             C   s   |j  rd S y,|jtjtj}|dkr6t|d|f W nB ttfk
rP   Y n6 tk
rz } z|j	| W Y d d }~X nX |j
d  d S )Nr   zConnect call failed %s)r   Z
getsockoptrS   Z
SOL_SOCKETZSO_ERRORrI   rE   rD   ra   r   r   )r!   r~   r%   r1   errr^   r   r   r   r     s    z&BaseSelectorEventLoop._sock_connect_cbc             C   s4   | j r|j dkrtd| j }| j|d| |S )Nr   zthe socket must be non-blockingF)rJ   rz   r{   r`   _sock_accept)r!   r%   r~   r   r   r   sock_accept  s
    
z!BaseSelectorEventLoop.sock_acceptc             C   s   |j  }|r| j| |j r"d S y|j \}}|jd W nV ttfk
rh   | j|| j|d| Y n: t	k
r } z|j
| W Y d d }~X nX |j||f d S )NFT)r;   rw   r   rV   r>   rE   rD   rv   r   ra   r   r   )r!   r~   Z
registeredr%   r   r\   r1   r^   r   r   r   r     s    
z"BaseSelectorEventLoop._sock_acceptc             C   s   x~|D ]v\}}|j |j }\}}|tj@ rN|d k	rN|jrD| j| n
| j| |tj@ r|d k	r|jrr| j| q| j| qW d S )N)	fileobjrA   r	   ri   Z
_cancelledr9   Z_add_callbackrs   ru   )r!   Z
event_listr   ro   r   rp   rq   r   r   r   _process_events  s    
z%BaseSelectorEventLoop._process_eventsc             C   s   | j |j  |j  d S )N)r9   r;   r6   )r!   r%   r   r   r   _stop_serving  s    z#BaseSelectorEventLoop._stop_serving)N)N)N)NNN)NNrL   )NNrL   )NN))r   
__module____qualname__r   r(   r.   r+   r2   r6   r8   r5   r   rB   r@   rK   rP   rM   r   rZ   re   r?   r9   rt   ru   rv   rw   rx   ry   r   r|   r   r   r   r   r   r   r   r   r   r   __classcell__r   r   )r   r   r   +   sR   



(#c                   s   e Zd ZdZeZdZd  fdd	Zdd Zdd	 Z	d
d Z
dd Zdd Zdd Zejr`dd Zd!ddZdd Zdd Zdd Zdd Z  ZS )"_SelectorTransport   i   Nc                s   t  j|| || jd< |j | jd< d| jkrdy|j | jd< W n  tjk
rb   d | jd< Y nX || _|j | _	|| _
d| _|| _| j | _d| _d| _| jd k	r| jj  | |j| j	< d S )NrS   ZsocknamerT   Tr   F)r   r   _extraZgetsocknameZgetpeernamerS   error_sockr;   _sock_fd	_protocol_protocol_connected_server_buffer_factory_buffer
_conn_lost_closingZ_attachr    )r!   r   r%   r&   r"   r#   )r   r   r   r     s&    





z_SelectorTransport.__init__c             C   s   | j jg}| jd kr |jd n| jr0|jd |jd| j  | jd k	r| jj  rt| jj	| jt
j}|rz|jd n
|jd t| jj	| jt
j}|rd}nd}| j }|jd||f  d	d
j| S )Nclosedclosingzfd=%szread=pollingz	read=idlepollingZidlezwrite=<%s, bufsize=%s>z<%s> )r   r   r   appendr   r   _loopr4   r   r   r	   ri   rs   get_write_buffer_sizejoin)r!   infor   statebufsizer   r   r   __repr__2  s*    



z_SelectorTransport.__repr__c             C   s   | j d  d S )N)_force_close)r!   r   r   r   abortN  s    z_SelectorTransport.abortc             C   s
   || _ d S )N)r   )r!   r&   r   r   r   set_protocolQ  s    z_SelectorTransport.set_protocolc             C   s   | j S )N)r   )r!   r   r   r   get_protocolT  s    z_SelectorTransport.get_protocolc             C   s   | j S )N)r   )r!   r   r   r   rc   W  s    z_SelectorTransport.is_closingc             C   sT   | j r
d S d| _ | jj| j | jsP|  jd7  _| jj| j | jj| jd  d S )NTr   )	r   r   r9   r   r   r   ru   	call_soon_call_connection_lost)r!   r   r   r   r6   Z  s    z_SelectorTransport.closec             C   s,   | j d k	r(tjd|  t| d | j j  d S )Nzunclosed transport %r)source)r   warningswarnResourceWarningr6   )r!   r   r   r   __del__h  s    
z_SelectorTransport.__del__Fatal error on transportc             C   sP   t |tjr*| jj rBtjd| |dd n| jj||| | jd | j	| d S )Nz%r: %sT)rG   )rQ   rR   r_   r&   )

isinstancer   Z_FATAL_ERROR_IGNOREr   	get_debugr   r   rY   r   r   )r!   r^   rQ   r   r   r   _fatal_errorn  s    
z_SelectorTransport._fatal_errorc             C   sd   | j r
d S | jr(| jj  | jj| j | jsBd| _| jj| j |  j d7  _ | jj| j	| d S )NTr   )
r   r   clearr   ru   r   r   r9   r   r   )r!   r^   r   r   r   r   |  s    
z_SelectorTransport._force_closec             C   sV   z| j r| jj| W d | jj  d | _d | _d | _| j}|d k	rP|j  d | _X d S )N)r   r   Zconnection_lostr   r6   r   r   Z_detach)r!   r^   r#   r   r   r   r     s    
z(_SelectorTransport._call_connection_lostc             C   s
   t | jS )N)r   r   )r!   r   r   r   r     s    z(_SelectorTransport.get_write_buffer_sizec             G   s"   | j r
d S | jj||f|  d S )N)r   r   r?   )r!   r   rl   rm   r   r   r   r?     s    z_SelectorTransport._add_readeri   )NN)r   )r   r   r   max_size	bytearrayr   r   r   r   r   r   r   rc   r6   r   ZPY34r   r   r   r   r   r?   r   r   r   )r   r   r     s"   
r   c                   sV   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
  ZS )r$   Nc                sr   t  j||||| d| _d| _tj| j | jj| j	j
|  | jj| j| j| j |d k	rn| jjtj|d  d S )NF)r   r   _eof_pausedr   Z_set_nodelayr   r   r   r   connection_mader?   r   _read_readyr   _set_result_unless_cancelled)r!   r   r%   r&   r'   r"   r#   )r   r   r   r     s    

z!_SelectorSocketTransport.__init__c             C   s>   | j s| jrd S d| _| jj| j | jj r:tjd|  d S )NTz%r pauses reading)r   r   r   r9   r   r   r   r   )r!   r   r   r   pause_reading  s    
z&_SelectorSocketTransport.pause_readingc             C   sB   | j s| j rd S d| _| j| j| j | jj r>tjd|  d S )NFz%r resumes reading)	r   r   r?   r   r   r   r   r   r   )r!   r   r   r   resume_reading  s    
z'_SelectorSocketTransport.resume_readingc             C   s   | j r
d S y| jj| j}W nD ttfk
r4   Y n| tk
r` } z| j|d W Y d d }~X nPX |rt| jj	| n<| j
j rtjd|  | jj }|r| j
j| j n| j  d S )Nz$Fatal read error on socket transportz%r received EOF)r   r   rC   r   rE   rD   ra   r   r   data_receivedr   r   r   r   eof_receivedr9   r   r6   )r!   rA   r^   	keep_openr   r   r   r     s     

z$_SelectorSocketTransport._read_readyc             C   s   t |tttfs"tdt|j | jr0td|s8d S | j	rf| j	t
jkrTtjd |  j	d7  _	d S | jsy| jj|}W nB ttfk
r   Y n@ tk
r } z| j|d d S d }~X nX ||d  }|sd S | jj| j| j | jj| | j  d S )Nz1data argument must be a bytes-like object, not %rz%Cannot call write() after write_eof()zsocket.send() raised exception.r   z%Fatal write error on socket transport)r   bytesr   
memoryview	TypeErrortyper   r   r3   r   r   !LOG_THRESHOLD_FOR_CONNLOST_WRITESr   warningr   r   rH   rE   rD   ra   r   r   rt   r   _write_readyextend_maybe_pause_protocol)r!   rA   r}   r^   r   r   r   write  s4    
z_SelectorSocketTransport.writec             C   s   | j r
d S y| jj| j}W n\ ttfk
r4   Y n tk
rx } z*| jj| j	 | jj
  | j|d W Y d d }~X nTX |r| jd |= | j  | js| jj| j	 | jr| jd  n| jr| jjtj d S )Nz%Fatal write error on socket transport)r   r   rH   r   rE   rD   ra   r   ru   r   r   r   _maybe_resume_protocolr   r   r   shutdownrS   SHUT_WR)r!   r}   r^   r   r   r   r     s&    
z%_SelectorSocketTransport._write_readyc             C   s.   | j s| jrd S d| _| js*| jjtj d S )NT)r   r   r   r   r   rS   r   )r!   r   r   r   	write_eof  s
    z"_SelectorSocketTransport.write_eofc             C   s   dS )NTr   )r!   r   r   r   can_write_eof   s    z&_SelectorSocketTransport.can_write_eof)NNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r$     s    #r$   c                   sd   e Zd ZeZd fdd	ZdddZdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Z  ZS )r/   NFc
                s   t d krtd|s tj||}|dd}
|r<| r<||
d< |j|f|
}t j|||||	 d| _|| _|| _	|| _
d| _| jj|d | jj rtjd|  | jj }nd }| j| d S )Nzstdlib ssl module not availableF)r)   Zdo_handshake_on_connectr*   )r-   z%r starts SSL handshake)sslr3   r   Z_create_transport_contextZwrap_socketr   r   r   _server_hostname_waiter_sslcontextr   r   updater   r   r   r   time_on_handshake)r!   r   r,   r&   r-   r'   r)   r*   r"   r#   Zwrap_kwargsZsslsock
start_time)r   r   r   r   (  s*    

z_SelectorSslTransport.__init__c             C   sD   | j d krd S | j j s:|d k	r.| j j| n| j jd  d | _ d S )N)r   r   r   r   )r!   r^   r   r   r   _wakeup_waiterL  s    

z$_SelectorSslTransport._wakeup_waiterc          "   C   s$  y| j j  W n tjk
r8   | jj| j| j| d S  tjk
r`   | jj	| j| j| d S  t
k
r } z`| jj rtjd| dd | jj| j | jj| j | j j  | j| t|trd S  W Y d d }~X nX | jj| j | jj| j | j j }t| jds| jr| jjtjkrytj|| j W nR tk
r } z4| jj rjtjd| dd | j j  | j| d S d }~X nX | jj|| j j | j j | j d d| _d| _ | jj| j| j! d| _"| jj#| j$j%|  | jj#| j | jj r | jj& | }tj'd| |d	  d S )
Nz%r: SSL handshake failedT)rG   Zcheck_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   r9   ru   r6   r   r   ra   Zgetpeercertr   r   r   Zverify_modeZ	CERT_NONEZmatch_hostnamer   r   r   r   _read_wants_write_write_wants_readr   r   r   r   r   r   r   )r!   r   r^   r   Zdtr   r   r   r   V  sb    













z#_SelectorSslTransport._on_handshakec             C   sJ   | j rtd| jrtdd| _| jj| j | jj rFtjd|  d S )Nz#Cannot pause_reading() when closingzAlready pausedTz%r pauses reading)	r   r3   r   r   r9   r   r   r   r   )r!   r   r   r   r     s    
z#_SelectorSslTransport.pause_readingc             C   sJ   | j stdd| _ | jrd S | jj| j| j | jj rFtj	d|  d S )Nz
Not pausedFz%r resumes reading)
r   r3   r   r   r?   r   r   r   r   r   )r!   r   r   r   r     s    
z$_SelectorSslTransport.resume_readingc             C   s"  | j r
d S | jr6d| _| j  | jr6| jj| j| j y| jj| j	}W n t
ttjfk
rd   Y n tjk
r   d| _| jj| j | jj| j| j Y n tk
r } z| j|d W Y d d }~X nTX |r| jj| n@z4| jj rtjd|  | jj }|rtjd W d | j  X d S )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   rt   r   r   rC   r   rE   rD   r   r   r   r   r9   ra   r   r   r   r   r   r   r   r   r6   )r!   rA   r^   r   r   r   r   r     s4    

z!_SelectorSslTransport._read_readyc             C   s(  | j r
d S | jr<d| _| j  | jp(| js<| jj| j| j | jry| j	j
| j}W n tttjfk
rt   d}Y np tjk
r   d}| jj| j d| _Y nD tk
r } z(| jj| j | jj  | j|d d S d }~X nX |r| jd |= | j  | js$| jj| j | jr$| jd  d S )NFr   Tz"Fatal write error on SSL transport)r   r   r   r   r   r   r?   r   r   r   rH   rE   rD   r   r   r   ru   r   ra   r   r   r   r   )r!   r}   r^   r   r   r   r     s8    

z"_SelectorSslTransport._write_readyc             C   s   t |tttfs"tdt|j |s*d S | jrX| jtj	krFt
jd |  jd7  _d S | jsp| jj| j| j | jj| | j  d S )Nz1data argument must be a bytes-like object, not %rzsocket.send() raised exception.r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   r   r   r   )r!   rA   r   r   r   r     s    
z_SelectorSslTransport.writec             C   s   dS )NFr   )r!   r   r   r   r     s    z#_SelectorSslTransport.can_write_eof)NFNNN)N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r/   $  s     "

?
"#r/   c                   sF   e Zd ZejZd fdd	Zdd Zdd Zddd	Z	d
d Z
  ZS )r0   Nc                s^   t  j|||| || _| jj| jj|  | jj| j| j| j	 |d k	rZ| jjt
j|d  d S )N)r   r   _addressr   r   r   r   r?   r   r   r   r   )r!   r   r%   r&   r1   r'   r"   )r   r   r   r     s    

z#_SelectorDatagramTransport.__init__c             C   s   t dd | jD S )Nc             s   s   | ]\}}t |V  qd S )N)r   ).0rA   r[   r   r   r   	<genexpr>  s    zC_SelectorDatagramTransport.get_write_buffer_size.<locals>.<genexpr>)sumr   )r!   r   r   r   r     s    z0_SelectorDatagramTransport.get_write_buffer_sizec             C   s   | j r
d S y| jj| j\}}W np ttfk
r8   Y nh tk
rd } z| jj| W Y d d }~X n< t	k
r } z| j
|d W Y d d }~X nX | jj|| d S )Nz&Fatal read error on datagram transport)r   r   Zrecvfromr   rE   rD   rI   r   error_receivedra   r   Zdatagram_received)r!   rA   r]   r^   r   r   r   r      s    z&_SelectorDatagramTransport._read_readyc             C   sT  t |tttfs"tdt|j |s*d S | jrN|d | jfkrNtd| jf | j	r| jr| j	t
jkrptjd |  j	d7  _	d S | js4y&| jr| jj| n| jj|| d S  ttfk
r   | jj| j| j Y nZ tk
r } z| jj| d S d }~X n. tk
r2 } z| j|d d S d }~X nX | jjt||f | j  d S )Nz1data argument must be a bytes-like object, not %rz#Invalid address: must be None or %szsocket.send() raised exception.r   z'Fatal write error on datagram transport)r   r   r   r   r   r   r   r   r{   r   r   r   r   r   r   r   rH   sendtorE   rD   r   rt   r   _sendto_readyrI   r   r   ra   r   r   r   )r!   rA   r]   r^   r   r   r   r   .  s<    
z!_SelectorDatagramTransport.sendtoc             C   s   x| j r| j j \}}y&| jr,| jj| n| jj|| W q ttfk
rf   | j j||f P Y q t	k
r } z| j
j| d S d }~X q tk
r } z| j|d d S d }~X qX qW | j  | j s| jj| j | jr| jd  d S )Nz'Fatal write error on datagram transport)r   popleftr   r   rH   r   rE   rD   
appendleftrI   r   r   ra   r   r   r   ru   r   r   r   )r!   rA   r]   r^   r   r   r   r   U  s*    z(_SelectorDatagramTransport._sendto_ready)NNN)N)r   r   r   collectionsdequer   r   r   r   r   r   r   r   r   )r   r   r0     s    
'r0   )__all__r   rX   r   rS   r   r   r   ImportError r   r   r   r   r   r	   r
   r   Z
coroutinesr   logr   r   ZBaseEventLoopr   Z_FlowControlMixinZ	Transportr   r$   r/   r0   r   r   r   r   <module>   sB   
   i   i