
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a<}  ã                   @   sP  d 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ddl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ejƒZG dd„ deejƒZG dd„ deejƒZG dd„ deƒZG dd„ deƒZG dd„ deeejƒZG dd„ deeejƒZG dd„ de	j ƒZ!dS ))ÚBaseProactorEventLoopé    Né   )Úbase_events)Ú	constants)Úfutures)Ú
exceptions)Ú	protocols)Ússlproto)Ú
transports)Útrsock)Úloggerc                 C   s–   t  |¡| jd< z| ¡ | jd< W n0 tjk
rR   | j ¡ rNtj	d|dd� Y nX d| jkr’z| 
¡ | jd< W n  tjk
r�   d | jd< Y nX d S )NÚsocketZsocknamezgetsockname() failed on %rT©Úexc_infoÚpeername)r   ÚTransportSocketÚ_extraZgetsocknamer   ÚerrorÚ_loopÚ	get_debugr   ÚwarningZgetpeername)Ú	transportÚsock© r   ú</opt/alt/python38/lib64/python3.8/asyncio/proactor_events.pyÚ_set_socket_extra   s    
  ÿ
r   c                       s~   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fdd„Zddd„Zdd„ Zdd„ Zdd„ Z‡  ZS )Ú_ProactorBasePipeTransportNc                    sœ   t ƒ  ||¡ |  |¡ || _|  |¡ || _d | _d | _d | _d| _	d| _
d| _d| _| jd k	rl| j ¡  | j | jj| ¡ |d k	r˜| j tj|d ¡ d S )Nr   F)ÚsuperÚ__init__Ú
_set_extraÚ_sockÚset_protocolÚ_serverÚ_bufferÚ	_read_futÚ
_write_futÚ_pending_writeÚ
_conn_lostÚ_closingÚ_eof_writtenZ_attachr   Ú	call_soonÚ	_protocolZconnection_mader   Z_set_result_unless_cancelled©ÚselfÚloopr   ÚprotocolÚwaiterÚextraÚserver©Ú	__class__r   r   r   2   s(    




 ÿz#_ProactorBasePipeTransport.__init__c                 C   sÄ   | j jg}| jd kr | d¡ n| jr0| d¡ | jd k	rP| d| j ¡ › �¡ | jd k	rl| d| j›�¡ | jd k	rˆ| d| j›�¡ | jr¤| dt	| jƒ› �¡ | j
r´| d¡ d d	 |¡¡S )
NÚclosedÚclosingzfd=zread=zwrite=zwrite_bufsize=zEOF writtenz<{}>ú )r4   Ú__name__r    Úappendr(   Úfilenor$   r%   r#   Úlenr)   ÚformatÚjoin)r-   Úinfor   r   r   Ú__repr__H   s     






z#_ProactorBasePipeTransport.__repr__c                 C   s   || j d< d S )NÚpipe)r   ©r-   r   r   r   r   r   Z   s    z%_ProactorBasePipeTransport._set_extrac                 C   s
   || _ d S ©N©r+   )r-   r/   r   r   r   r!   ]   s    z'_ProactorBasePipeTransport.set_protocolc                 C   s   | j S rB   rC   ©r-   r   r   r   Úget_protocol`   s    z'_ProactorBasePipeTransport.get_protocolc                 C   s   | j S rB   )r(   rD   r   r   r   Ú
is_closingc   s    z%_ProactorBasePipeTransport.is_closingc                 C   s\   | j r
d S d| _ |  jd7  _| js>| jd kr>| j | jd ¡ | jd k	rX| j ¡  d | _d S )NTr   )	r(   r'   r#   r%   r   r*   Ú_call_connection_lostr$   ÚcancelrD   r   r   r   Úclosef   s    

z _ProactorBasePipeTransport.closec                 C   s*   | j d k	r&|d| ›�t| d� |  ¡  d S )Nzunclosed transport )Úsource)r    ÚResourceWarningrI   )r-   Z_warnr   r   r   Ú__del__q   s    
z"_ProactorBasePipeTransport.__del__úFatal error on pipe transportc              	   C   sV   zDt|tƒr*| j ¡ rBtjd| |dd� n| j ||| | jdœ¡ W 5 |   |¡ X d S )Nz%r: %sTr   )ÚmessageÚ	exceptionr   r/   )	Ú_force_closeÚ
isinstanceÚOSErrorr   r   r   ÚdebugÚcall_exception_handlerr+   )r-   ÚexcrN   r   r   r   Ú_fatal_errorv   s    

üz'_ProactorBasePipeTransport._fatal_errorc                 C   s    | j d k	r6| j  ¡ s6|d kr*| j  d ¡ n| j  |¡ | jr@d S d| _|  jd7  _| jrj| j ¡  d | _| jr€| j ¡  d | _d| _	d | _
| j | j|¡ d S )NTr   r   )Ú_empty_waiterÚdoneÚ
set_resultZset_exceptionr(   r'   r%   rH   r$   r&   r#   r   r*   rG   )r-   rU   r   r   r   rP   …   s"    

z'_ProactorBasePipeTransport._force_closec              	   C   s^   z| j 	|¡ W 5 t | jdƒr,| j tj¡ | j ¡  d | _| j}|d k	rX| ¡  d | _X d S )NÚshutdown)
Úhasattrr    rZ   r   Z	SHUT_RDWRrI   r"   Z_detachr+   Zconnection_lost)r-   rU   r2   r   r   r   rG   ™   s    
z0_ProactorBasePipeTransport._call_connection_lostc                 C   s"   | j }| jd k	r|t| jƒ7 }|S rB   )r&   r#   r;   )r-   Úsizer   r   r   Úget_write_buffer_sizeª   s    
z0_ProactorBasePipeTransport.get_write_buffer_size)NNN)rM   )r8   Ú
__module__Ú__qualname__r   r?   r   r!   rE   rF   rI   ÚwarningsÚwarnrL   rV   rP   rG   r]   Ú__classcell__r   r   r3   r   r   .   s       ÿ
r   c                       sP   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d„Z	‡  Z
S )Ú_ProactorReadPipeTransportNc                    s:   d | _ d| _tƒ  ||||||¡ | j | j¡ d| _d S )NTF)Ú_pending_dataÚ_pausedr   r   r   r*   Ú_loop_readingr,   r3   r   r   r   µ   s
    z#_ProactorReadPipeTransport.__init__c                 C   s   | j  o| j S rB   )re   r(   rD   r   r   r   Ú
is_reading¾   s    z%_ProactorReadPipeTransport.is_readingc                 C   s0   | j s| jrd S d| _| j ¡ r,t d| ¡ d S )NTz%r pauses reading)r(   re   r   r   r   rS   rD   r   r   r   Úpause_readingÁ   s
    
z(_ProactorReadPipeTransport.pause_readingc                 C   sn   | j s| jsd S d| _| jd kr0| j | jd ¡ | j}d | _|d k	rT| j | j|¡ | j ¡ rjt	 
d| ¡ d S )NFz%r resumes reading)r(   re   r$   r   r*   rf   rd   Ú_data_receivedr   r   rS   ©r-   Údatar   r   r   Úresume_readingÔ   s    

z)_ProactorReadPipeTransport.resume_readingc              
   C   s‚   | j  ¡ rt d| ¡ z| j ¡ }W nL ttfk
r>   ‚ Y n4 tk
rp } z|  	|d¡ W Y ¢d S d }~X Y nX |s~|  
¡  d S )Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.)r   r   r   rS   r+   Zeof_receivedÚ
SystemExitÚKeyboardInterruptÚBaseExceptionrV   rI   )r-   Z	keep_openrU   r   r   r   Ú_eof_receivedæ   s    
 ÿz(_ProactorReadPipeTransport._eof_receivedc              
   C   s    | j r|| _d S |s |  ¡  d S t| jtjƒr�zt | j|¡ W qœ tt	fk
rZ   ‚ Y qœ t
k
rŒ } z|  |d¡ W Y ¢d S d }~X Y qœX n| j |¡ d S )Nz3Fatal error: protocol.buffer_updated() call failed.)re   rd   rp   rQ   r+   r   ZBufferedProtocolZ_feed_data_to_buffered_protorm   rn   ro   rV   Zdata_received)r-   rk   rU   r   r   r   ri   ö   s"    ÿz)_ProactorReadPipeTransport._data_receivedc              
   C   st  d }�zRzp|d k	r2d | _| ¡ r*| ¡ }n| ¡  | jrHd }W W �¢d S |dkr\W W �¢d S | jsv| jj 	| j
d¡| _W nÆ tk
rÆ } z0| jsž|  |d¡ n| j ¡ r¶tjddd� W 5 d }~X Y n� tk
rð } z|  |¡ W 5 d }~X Y nf tk
�r } z|  |d¡ W 5 d }~X Y n8 tjk
�r>   | j�s:‚ Y nX | j�sV| j | j¡ W 5 |d k	�rn|   |¡ X d S )Nó    i €  z"Fatal read error on pipe transportz*Read error on pipe transport while closingTr   )ri   r$   rX   ÚresultrH   r(   re   r   Ú	_proactorÚrecvr    ÚConnectionAbortedErrorrV   r   r   rS   ÚConnectionResetErrorrP   rR   r   ÚCancelledErrorÚadd_done_callbackrf   )r-   Úfutrk   rU   r   r   r   rf     s@    

ÿ
z(_ProactorReadPipeTransport._loop_reading)NNN)N)r8   r^   r_   r   rg   rh   rl   rp   ri   rf   rb   r   r   r3   r   rc   ±   s       ÿ	rc   c                       sZ   e Zd ZdZ‡ fdd„Zdd„ Zddd„Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Z‡  ZS )Ú_ProactorBaseWritePipeTransportTc                    s   t ƒ j||Ž d | _d S rB   )r   r   rW   ©r-   ÚargsÚkwr3   r   r   r   G  s    z(_ProactorBaseWritePipeTransport.__init__c                 C   sÈ   t |tttfƒs$tdt|ƒj› �ƒ‚| jr2tdƒ‚| j	d k	rDtdƒ‚|sLd S | j
rz| j
tjkrht d¡ |  j
d7  _
d S | jd kr–| jt|ƒd� n.| js°t|ƒ| _|  ¡  n| j |¡ |  ¡  d S )Nz/data argument must be a bytes-like object, not zwrite_eof() already calledz(unable to write; sendfile is in progresszsocket.send() raised exception.r   )rk   )rQ   ÚbytesÚ	bytearrayÚ
memoryviewÚ	TypeErrorÚtyper8   r)   ÚRuntimeErrorrW   r'   r   Ú!LOG_THRESHOLD_FOR_CONNLOST_WRITESr   r   r%   Ú_loop_writingr#   Ú_maybe_pause_protocolÚextendrj   r   r   r   ÚwriteK  s,    ÿ




z%_ProactorBaseWritePipeTransport.writeNc              
   C   sV  zô|d k	r | j d kr | jr W d S d | _ d| _|r8| ¡  |d krL| j}d | _|s„| jrf| j | jd ¡ | jrz| j	 
tj¡ |  ¡  nN| jj | j	|¡| _ | j  ¡ sÄt|ƒ| _| j  | j¡ |  ¡  n| j  | j¡ | jd k	rò| j d krò| j d ¡ W n\ tk
�r" } z|  |¡ W 5 d }~X Y n0 tk
�rP } z|  |d¡ W 5 d }~X Y nX d S )Nr   z#Fatal write error on pipe transport)r%   r(   r&   rr   r#   r   r*   rG   r)   r    rZ   r   ÚSHUT_WRÚ_maybe_resume_protocolrs   ÚsendrX   r;   rx   r…   r†   rW   rY   rv   rP   rR   rV   )r-   Úfrk   rU   r   r   r   r…   q  s8    



z-_ProactorBaseWritePipeTransport._loop_writingc                 C   s   dS ©NTr   rD   r   r   r   Úcan_write_eofš  s    z-_ProactorBaseWritePipeTransport.can_write_eofc                 C   s   |   ¡  d S rB   )rI   rD   r   r   r   Ú	write_eof�  s    z)_ProactorBaseWritePipeTransport.write_eofc                 C   s   |   d ¡ d S rB   ©rP   rD   r   r   r   Úabort   s    z%_ProactorBaseWritePipeTransport.abortc                 C   s:   | j d k	rtdƒ‚| j ¡ | _ | jd kr4| j  d ¡ | j S )NzEmpty waiter is already set)rW   rƒ   r   Zcreate_futurer%   rY   rD   r   r   r   Ú_make_empty_waiter£  s    

z2_ProactorBaseWritePipeTransport._make_empty_waiterc                 C   s
   d | _ d S rB   )rW   rD   r   r   r   Ú_reset_empty_waiter«  s    z3_ProactorBaseWritePipeTransport._reset_empty_waiter)NN)r8   r^   r_   Z_start_tls_compatibler   rˆ   r…   rŽ   r�   r‘   r’   r“   rb   r   r   r3   r   rz   A  s   &
)rz   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú_ProactorWritePipeTransportc                    s4   t ƒ j||Ž | jj | jd¡| _| j | j¡ d S )Né   )	r   r   r   rs   rt   r    r$   rx   Ú_pipe_closedr{   r3   r   r   r   °  s    z$_ProactorWritePipeTransport.__init__c                 C   s@   |  ¡ rd S | jrd S d | _| jd k	r4|  tƒ ¡ n|  ¡  d S rB   )Z	cancelledr(   r$   r%   rP   ÚBrokenPipeErrorrI   )r-   ry   r   r   r   r–   µ  s    
z(_ProactorWritePipeTransport._pipe_closed)r8   r^   r_   r   r–   rb   r   r   r3   r   r”   ¯  s   r”   c                       sX   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Zddd„Zddd„Z	ddd„Z
‡  ZS )Ú_ProactorDatagramTransporti   Nc                    s>   || _ d | _tƒ j|||||d� t ¡ | _| j | j	¡ d S )N)r0   r1   )
Ú_addressrW   r   r   ÚcollectionsÚdequer#   r   r*   rf   )r-   r.   r   r/   Úaddressr0   r1   r3   r   r   r   Ç  s
    
z#_ProactorDatagramTransport.__init__c                 C   s   t | |ƒ d S rB   ©r   rA   r   r   r   r   Ó  s    z%_ProactorDatagramTransport._set_extrac                 C   s   t dd„ | jD ƒƒS )Nc                 s   s   | ]\}}t |ƒV  qd S rB   )r;   )Ú.0rk   Ú_r   r   r   Ú	<genexpr>×  s     zC_ProactorDatagramTransport.get_write_buffer_size.<locals>.<genexpr>)Úsumr#   rD   r   r   r   r]   Ö  s    z0_ProactorDatagramTransport.get_write_buffer_sizec                 C   s   |   d ¡ d S rB   r�   rD   r   r   r   r‘   Ù  s    z _ProactorDatagramTransport.abortc                 C   s´   t |tttfƒstdt|ƒƒ‚|s&d S | jd k	rN|d | jfkrNtd| j› �ƒ‚| jr‚| jr‚| jt	j
krpt d¡ |  jd7  _d S | j t|ƒ|f¡ | jd kr¨|  ¡  |  ¡  d S )Nz,data argument must be bytes-like object (%r)z!Invalid address: must be None or z!socket.sendto() raised exception.r   )rQ   r~   r   r€   r�   r‚   r™   Ú
ValueErrorr'   r   r„   r   r   r#   r9   r%   r…   r†   )r-   rk   Úaddrr   r   r   ÚsendtoÜ  s&    ÿ
ÿ

z!_ProactorDatagramTransport.sendtoc              
   C   s  z–| j rW d S d | _|r | ¡  | jr2| j rN| jrN| jrH| j | jd ¡ W d S | j 	¡ \}}| jd k	r|| jj
 | j|¡| _n| jj
j| j||d�| _W nZ tk
rÄ } z| j |¡ W 5 d }~X Y nD tk
rð } z|  |d¡ W 5 d }~X Y nX | j | j¡ |  ¡  d S )N)r£   z'Fatal write error on datagram transport)r'   r%   rr   r#   r™   r(   r   r*   rG   Úpopleftrs   r‹   r    r¤   rR   r+   Úerror_receivedÚ	ExceptionrV   rx   r…   rŠ   )r-   ry   rk   r£   rU   r   r   r   r…   ø  s2    
ÿþz(_ProactorDatagramTransport._loop_writingc              
   C   s4  d }�zz¨| jrW W �¢d S d | _|d k	rf| ¡ }| jrFd }W W ¢Ød S | jd k	r^|| j }}n|\}}| jrvW W ¢¨d S | jd k	r˜| jj 	| j
| j¡| _n| jj | j
| j¡| _W nJ tk
rÞ } z| j  |¡ W 5 d }~X Y n8 tjk
rú   | jsö‚ Y nX | jd k	�r| j | j¡ W 5 |�r.| j  ||¡ X d S rB   )r+   Zdatagram_receivedr'   r$   rr   r(   r™   r   rs   rt   r    Úmax_sizeZrecvfromrR   r¦   r   rw   rx   rf   )r-   ry   rk   r£   ÚresrU   r   r   r   rf     s>    



ÿÿ
z(_ProactorDatagramTransport._loop_reading)NNN)N)N)N)r8   r^   r_   r¨   r   r   r]   r‘   r¤   r…   rf   rb   r   r   r3   r   r˜   Å  s       ÿ

!r˜   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_ProactorDuplexPipeTransportc                 C   s   dS )NFr   rD   r   r   r   rŽ   J  s    z*_ProactorDuplexPipeTransport.can_write_eofc                 C   s   t ‚d S rB   )ÚNotImplementedErrorrD   r   r   r   r�   M  s    z&_ProactorDuplexPipeTransport.write_eofN)r8   r^   r_   rŽ   r�   r   r   r   r   rª   E  s   rª   c                       s>   e Zd ZejjZd
‡ fdd„	Zdd„ Zdd„ Z	dd	„ Z
‡  ZS )Ú_ProactorSocketTransportNc                    s$   t ƒ  ||||||¡ t |¡ d S rB   )r   r   r   Z_set_nodelayr,   r3   r   r   r   X  s    z!_ProactorSocketTransport.__init__c                 C   s   t | |ƒ d S rB   r�   rA   r   r   r   r   ]  s    z#_ProactorSocketTransport._set_extrac                 C   s   dS r�   r   rD   r   r   r   rŽ   `  s    z&_ProactorSocketTransport.can_write_eofc                 C   s2   | j s| jrd S d| _| jd kr.| j tj¡ d S r�   )r(   r)   r%   r    rZ   r   r‰   rD   r   r   r   r�   c  s
    
z"_ProactorSocketTransport.write_eof)NNN)r8   r^   r_   r   Z_SendfileModeZ
TRY_NATIVEZ_sendfile_compatibler   r   rŽ   r�   rb   r   r   r3   r   r¬   Q  s       ÿr¬   c                       sî   e Zd Z‡ fdd„Zd3dd„Zd4ddddddœdd	„Zd5d
d„Zd6dd„Zd7dd„Zd8dd„Z	‡ 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d"d#„ Zd$d%„ Zd9d&d'„Zd(d)„ Zd:d+d,„Zd-d.„ Zd/d0„ Zd1d2„ Z‡  ZS );r   c                    sh   t ƒ  ¡  t d|jj¡ || _|| _d | _i | _	| 
| ¡ |  ¡  t ¡ t ¡ krdt | j ¡ ¡ d S )NzUsing proactor: %s)r   r   r   rS   r4   r8   rs   Ú	_selectorÚ_self_reading_futureÚ_accept_futuresZset_loopÚ_make_self_pipeÚ	threadingÚcurrent_threadÚmain_threadÚsignalÚset_wakeup_fdÚ_csockr:   )r-   Zproactorr3   r   r   r   m  s    

zBaseProactorEventLoop.__init__Nc                 C   s   t | |||||ƒS rB   )r¬   )r-   r   r/   r0   r1   r2   r   r   r   Ú_make_socket_transportz  s    
 ÿz,BaseProactorEventLoop._make_socket_transportF)Úserver_sideÚserver_hostnamer1   r2   Ússl_handshake_timeoutc             	   C   s0   t j| ||||||	d�}
t| ||
||d� |
jS )N)rº   ©r1   r2   )r	   ZSSLProtocolr¬   Z_app_transport)r-   Zrawsockr/   Ú
sslcontextr0   r¸   r¹   r1   r2   rº   Zssl_protocolr   r   r   Ú_make_ssl_transport  s        ý ÿz)BaseProactorEventLoop._make_ssl_transportc                 C   s   t | |||||ƒS rB   )r˜   )r-   r   r/   rœ   r0   r1   r   r   r   Ú_make_datagram_transportŒ  s    
 ÿz.BaseProactorEventLoop._make_datagram_transportc                 C   s   t | ||||ƒS rB   )rª   ©r-   r   r/   r0   r1   r   r   r   Ú_make_duplex_pipe_transport‘  s       ÿz1BaseProactorEventLoop._make_duplex_pipe_transportc                 C   s   t | ||||ƒS rB   )rc   r¿   r   r   r   Ú_make_read_pipe_transport–  s    z/BaseProactorEventLoop._make_read_pipe_transportc                 C   s   t | ||||ƒS rB   )r”   r¿   r   r   r   Ú_make_write_pipe_transportš  s       ÿz0BaseProactorEventLoop._make_write_pipe_transportc                    sj   |   ¡ rtdƒ‚|  ¡ rd S t ¡ t ¡ kr6t d¡ |  ¡  |  	¡  | j
 ¡  d | _
d | _tƒ  ¡  d S )Nz!Cannot close a running event loopéÿÿÿÿ)Z
is_runningrƒ   Ú	is_closedr±   r²   r³   r´   rµ   Ú_stop_accept_futuresÚ_close_self_pipers   rI   r­   r   rD   r3   r   r   rI      s    

zBaseProactorEventLoop.closec                 Ã   s   | j  ||¡I d H S rB   )rs   rt   )r-   r   Únr   r   r   Ú	sock_recv´  s    zBaseProactorEventLoop.sock_recvc                 Ã   s   | j  ||¡I d H S rB   )rs   Z	recv_into)r-   r   Zbufr   r   r   Úsock_recv_into·  s    z$BaseProactorEventLoop.sock_recv_intoc                 Ã   s   | j  ||¡I d H S rB   )rs   r‹   )r-   r   rk   r   r   r   Úsock_sendallº  s    z"BaseProactorEventLoop.sock_sendallc                 Ã   s   | j  ||¡I d H S rB   )rs   Zconnect)r-   r   rœ   r   r   r   Úsock_connect½  s    z"BaseProactorEventLoop.sock_connectc                 Ã   s   | j  |¡I d H S rB   )rs   ÚacceptrA   r   r   r   Úsock_acceptÀ  s    z!BaseProactorEventLoop.sock_acceptc              
   Ã   s(  z|  ¡ }W n2 ttjfk
r> } zt d¡‚W 5 d }~X Y nX zt |¡j}W n, t	k
r| } zt d¡‚W 5 d }~X Y nX |r†|n|}|s’dS t
|dƒ}|r®t
|| |ƒn|}	t
||ƒ}d}
zLt
|	| |ƒ}|dkrà|
W ¢0S | j ||||¡I d H  ||7 }|
|7 }
qÂW 5 |
dk�r"| |¡ X d S )Nznot a regular filer   l   ÿÿ )r:   ÚAttributeErrorÚioÚUnsupportedOperationr   ZSendfileNotAvailableErrorÚosÚfstatÚst_sizerR   ÚminÚseekrs   Úsendfile)r-   r   ÚfileÚoffsetÚcountr:   ÚerrZfsizeZ	blocksizeZend_posZ
total_sentr   r   r   Ú_sock_sendfile_nativeÃ  s0    


z+BaseProactorEventLoop._sock_sendfile_nativec                 Ã   sZ   |  ¡ }| ¡  | ¡ I d H  z | j|j|||dd�I d H W ¢S | ¡  |rT| ¡  X d S )NF)Zfallback)rg   rh   r’   r“   rl   Zsock_sendfiler    )r-   Ztranspr×   rØ   rÙ   rl   r   r   r   Ú_sendfile_nativeà  s    ÿz&BaseProactorEventLoop._sendfile_nativec                 C   sL   | j d k	r| j  ¡  d | _ | j ¡  d | _| j ¡  d | _|  jd8  _d S )Nr   )r®   rH   Ú_ssockrI   r¶   Ú_internal_fdsrD   r   r   r   rÆ   ì  s    



z&BaseProactorEventLoop._close_self_pipec                 C   s:   t  ¡ \| _| _| j d¡ | j d¡ |  jd7  _d S )NFr   )r   Z
socketpairrÝ   r¶   ZsetblockingrÞ   rD   r   r   r   r°   ö  s    z%BaseProactorEventLoop._make_self_pipec              
   C   s®   z4|d k	r|  ¡  | j|k	r"W d S | j | jd¡}W nb tjk
rL   Y d S  ttfk
rd   ‚ Y nF t	k
r– } z|  
d|| dœ¡ W 5 d }~X Y nX || _| | j¡ d S )Ni   z.Error on reading from the event loop self pipe)rN   rO   r.   )rr   r®   rs   rt   rÝ   r   rw   rm   rn   ro   rT   rx   Ú_loop_self_reading)r-   rŒ   rU   r   r   r   rß   ý  s$    
ýz(BaseProactorEventLoop._loop_self_readingc                 C   sN   | j }|d krd S z| d¡ W n( tk
rH   | jrDtjddd� Y nX d S )Nó    z3Fail to write a null byte into the self-pipe socketTr   )r¶   r‹   rR   Ú_debugr   rS   )r-   Zcsockr   r   r   Ú_write_to_self  s    þz$BaseProactorEventLoop._write_to_selféd   c                    s(   d‡ ‡‡‡‡‡‡fdd„	‰ ˆ  ˆ ¡ d S )Nc              
      s,  zŠ| d k	rn|   ¡ \}}ˆjr,t dˆ||¡ ˆƒ }ˆd k	rXˆj||ˆdd|iˆˆd� nˆj||d|iˆd� ˆ ¡ r|W d S ˆj ˆ¡} W n„ t	k
rð } zHˆ 
¡ dkrÊˆ d|t ˆ¡dœ¡ ˆ ¡  nˆjràtjd	ˆdd
� W 5 d }~X Y n8 tjk
�r   ˆ ¡  Y nX | ˆjˆ 
¡ < |  ˆ ¡ d S )Nz#%r got a new connection from %r: %rTr   )r¸   r1   r2   rº   r»   rÃ   zAccept failed on a socket)rN   rO   r   zAccept failed on socket %rr   )rr   rá   r   rS   r½   r·   rÄ   rs   rÌ   rR   r:   rT   r   r   rI   r   rw   r¯   rx   )rŒ   Zconnr£   r/   rU   ©r.   Úprotocol_factoryr-   r2   r   rº   r¼   r   r   r.   /  s\      ÿ    ý  þý
 ÿz2BaseProactorEventLoop._start_serving.<locals>.loop)N)r*   )r-   rå   r   r¼   r2   Zbacklogrº   r   rä   r   Ú_start_serving+  s    %z$BaseProactorEventLoop._start_servingc                 C   s   d S rB   r   )r-   Z
event_listr   r   r   Ú_process_eventsV  s    z%BaseProactorEventLoop._process_eventsc                 C   s&   | j  ¡ D ]}| ¡  q
| j  ¡  d S rB   )r¯   ÚvaluesrH   Úclear)r-   Úfuturer   r   r   rÅ   Z  s    
z*BaseProactorEventLoop._stop_accept_futuresc                 C   s6   | j  | ¡ d ¡}|r| ¡  | j |¡ | ¡  d S rB   )r¯   Úpopr:   rH   rs   Ú_stop_servingrI   )r-   r   rê   r   r   r   rì   _  s
    z#BaseProactorEventLoop._stop_serving)NNN)N)NNN)NN)NN)NN)N)NNrã   N)r8   r^   r_   r   r·   r½   r¾   rÀ   rÁ   rÂ   rI   rÈ   rÉ   rÊ   rË   rÍ   rÛ   rÜ   rÆ   r°   rß   râ   ræ   rç   rÅ   rì   rb   r   r   r3   r   r   k  s\       ÿ
 ÿ  ü     ÿ
  ÿ
  ÿ
  ÿ


      þ
+r   )"Ú__all__rÏ   rÑ   r   r`   r´   r±   rš   Ú r   r   r   r   r   r	   r
   r   Úlogr   r   Z_FlowControlMixinZBaseTransportr   ZReadTransportrc   ZWriteTransportrz   r”   r˜   Z	Transportrª   r¬   ZBaseEventLoopr   r   r   r   r   Ú<module>   sP   ÿ ÿ ÿn þþ