<!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>
B
     f5d                 @   s  d Z d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 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eejZG dd deeejZG dd dejZdS )zEvent loop using a proactor and related classes.

A proactor is a "notify-on-completion" multiplexer.  Currently a
proactor is only implemented on Windows with IOCP.
)BaseProactorEventLoop    N   )base_events)	constants)events)futures)	protocols)sslproto)
transports)loggerc                   s|   e Zd 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dddZdd Zdd Zdd Z  ZS )_ProactorBasePipeTransportz*Base class for pipe and socket transports.Nc                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_attach_loop	call_soon	_protocolZconnection_mader   Z_set_result_unless_cancelled)selfloopsockprotocolwaiterextraserver)	__class__ </opt/alt/python37/lib64/python3.7/asyncio/proactor_events.pyr      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<{}> )r$   __name__r   appendr   filenor   r   r   lenr   formatjoin)r   infor%   r%   r&   __repr__2   s     






z#_ProactorBasePipeTransport.__repr__c             C   s   || j d< d S )Npipe)_extra)r   r   r%   r%   r&   r   D   s    z%_ProactorBasePipeTransport._set_extrac             C   s
   || _ d S )N)r   )r   r    r%   r%   r&   r   G   s    z'_ProactorBasePipeTransport.set_protocolc             C   s   | j S )N)r   )r   r%   r%   r&   get_protocolJ   s    z'_ProactorBasePipeTransport.get_protocolc             C   s   | j S )N)r   )r   r%   r%   r&   
is_closingM   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   cancel)r   r%   r%   r&   closeP   s    

z _ProactorBasePipeTransport.closec             C   s,   | j d k	r(tjd| t| d |   d S )Nzunclosed transport )source)r   warningswarnResourceWarningr8   )r   r%   r%   r&   __del__[   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 d | | X d S )Nz%r: %sT)exc_info)message	exceptionZ	transportr    )	
isinstanceOSErrorr   	get_debugr   debugcall_exception_handlerr   _force_close)r   excr@   r%   r%   r&   _fatal_errora   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   r7   r   r   r   r   r   r6   )r   rH   r%   r%   r&   rG   p   s"    

z'_ProactorBasePipeTransport._force_closec          	   C   s^   z| j | W d t| jdr,| jtj | j  d | _| j}|d k	rX|	  d | _X d S )Nshutdown)
r   Zconnection_losthasattrr   rM   socketZ	SHUT_RDWRr8   r   Z_detach)r   rH   r#   r%   r%   r&   r6      s    
z0_ProactorBasePipeTransport._call_connection_lostc             C   s"   | j }| jd k	r|t| j7 }|S )N)r   r   r-   )r   sizer%   r%   r&   get_write_buffer_size   s    
z0_ProactorBasePipeTransport.get_write_buffer_size)NNN)r>   )r*   
__module____qualname____doc__r   r1   r   r   r4   r5   r8   r=   rI   rG   r6   rQ   __classcell__r%   r%   )r$   r&   r      s    
r   c                   sT   e Zd 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 )_ProactorReadPipeTransportzTransport for read pipes.Nc                s:   d | _ d| _t |||||| | j| j d| _d S )NTF)_pending_data_pausedr   r   r   r   _loop_reading)r   r   r   r    r!   r"   r#   )r$   r%   r&   r      s
    z#_ProactorReadPipeTransport.__init__c             C   s   | j  o| j S )N)rX   r   )r   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   rX   r   rD   r   rE   )r   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   rX   r   r   r   rY   rW   _data_receivedrD   r   rE   )r   datar%   r%   r&   resume_reading   s    

z)_ProactorReadPipeTransport.resume_readingc          
   C   sd   | j  rtd|  y| j }W n. tk
rR } z| |d d S d }~X Y nX |s`|   d S )Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.)	r   rD   r   rE   r   Zeof_received	ExceptionrI   r8   )r   Z	keep_openrH   r%   r%   r&   _eof_received   s    
z(_ProactorReadPipeTransport._eof_receivedc          
   C   s   | j r|| _d S |s |   d S t| jtjrryt| j| W q~ tk
rn } z| 	|d d S d }~X Y q~X n| j
| d S )Nz3Fatal error: protocol.buffer_updated() call failed.)rX   rW   r`   rB   r   r   ZBufferedProtocolZ_feed_data_to_buffered_protor_   rI   Zdata_received)r   r]   rH   r%   r%   r&   r\      s    z)_ProactorReadPipeTransport._data_receivedc          
   C   sd  d }zBy`|d k	r2d | _ | r*| }n|  | jr@d }d S |dkrLd S | jsf| jj| j	d| _ W n t
k
r } z0| js| |d n| j rtjddd W d d }~X Y n tk
r } z| | W d d }~X Y nf tk
r } z| |d W d d }~X Y n8 tjk
r.   | js* Y nX | jsF| j | j W d |d k	r^| | X d S )N    i   z"Fatal read error on pipe transportz*Read error on pipe transport while closingT)r?   )r   rK   resultr7   r   rX   r   	_proactorrecvr   ConnectionAbortedErrorrI   rD   r   rE   ConnectionResetErrorrG   rC   r   CancelledErroradd_done_callbackrY   r\   )r   futr]   rH   r%   r%   r&   rY      s>    


z(_ProactorReadPipeTransport._loop_reading)NNN)N)r*   rR   rS   rT   r   rZ   r[   r^   r`   r\   rY   rU   r%   r%   )r$   r&   rV      s    rV   c                   s^   e Zd 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 )_ProactorBaseWritePipeTransportzTransport for write pipes.Tc                s   t  j|| d | _d S )N)r   r   rJ   )r   argskw)r$   r%   r&   r   .  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st|| _|   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   )r]   )rB   bytes	bytearray
memoryview	TypeErrortyper*   r   RuntimeErrorrJ   r   r   Z!LOG_THRESHOLD_FOR_CONNLOST_WRITESr   warningr   _loop_writingr   _maybe_pause_protocolextend)r   r]   r%   r%   r&   write2  s*    




z%_ProactorBaseWritePipeTransport.writeNc          
   C   sT  y|d k	r| j d kr| jrd S d | _ d| _|r6|  |d krJ| j}d | _|s| jrd| j| jd  | jrx| j	
tj |   nN| jj| j	|| _ | j  st|| _| j | j |   n| j | j | jd k	r| j d kr| jd  W n\ tk
r  } z| | W d d }~X Y n0 tk
rN } z| |d W d d }~X Y nX d S )Nr   z#Fatal write error on pipe transport)r   r   r   rb   r   r   r   r6   r   r   rM   rO   SHUT_WRZ_maybe_resume_protocolrc   sendrK   r-   rh   rt   ru   rJ   rL   rf   rG   rC   rI   )r   fr]   rH   r%   r%   r&   rt   X  s8    



z-_ProactorBaseWritePipeTransport._loop_writingc             C   s   dS )NTr%   )r   r%   r%   r&   can_write_eof  s    z-_ProactorBaseWritePipeTransport.can_write_eofc             C   s   |    d S )N)r8   )r   r%   r%   r&   	write_eof  s    z)_ProactorBaseWritePipeTransport.write_eofc             C   s   |  d  d S )N)rG   )r   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)rJ   rr   r   Zcreate_futurer   rL   )r   r%   r%   r&   _make_empty_waiter  s    

z2_ProactorBaseWritePipeTransport._make_empty_waiterc             C   s
   d | _ d S )N)rJ   )r   r%   r%   r&   _reset_empty_waiter  s    z3_ProactorBaseWritePipeTransport._reset_empty_waiter)NN)r*   rR   rS   rT   Z_start_tls_compatibler   rw   rt   r{   r|   r}   r~   r   rU   r%   r%   )r$   r&   rj   (  s   &
)rj   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   rc   rd   r   r   rh   _pipe_closed)r   rk   rl   )r$   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 )N)Z	cancelledr   r   r   rG   BrokenPipeErrorr8   )r   ri   r%   r%   r&   r     s    
z(_ProactorWritePipeTransport._pipe_closed)r*   rR   rS   r   r   rU   r%   r%   )r$   r&   r     s   r   c               @   s    e Zd ZdZdd Zdd ZdS )_ProactorDuplexPipeTransportzTransport for duplex pipes.c             C   s   dS )NFr%   )r   r%   r%   r&   r{     s    z*_ProactorDuplexPipeTransport.can_write_eofc             C   s   t d S )N)NotImplementedError)r   r%   r%   r&   r|     s    z&_ProactorDuplexPipeTransport.write_eofN)r*   rR   rS   rT   r{   r|   r%   r%   r%   r&   r     s   r   c                   sB   e Zd ZdZejjZd fdd	Zdd Z	dd Z
d	d
 Z  ZS )_ProactorSocketTransportz Transport for connected sockets.Nc                s$   t  |||||| t| d S )N)r   r   r   Z_set_nodelay)r   r   r   r    r!   r"   r#   )r$   r%   r&   r     s    z!_ProactorSocketTransport.__init__c          	   C   s   || j d< y| | j d< W n4 tjtfk
rP   | j rLtjd|dd Y nX d| j kry|	 | j d< W n4 tjtfk
r   | j rtjd|dd Y nX d S )NrO   Zsocknamezgetsockname() failed on %rT)r?   peernamezgetpeername() failed on %r)
r3   ZgetsocknamerO   errorAttributeErrorr   rD   r   rs   Zgetpeername)r   r   r%   r%   r&   r     s    



z#_ProactorSocketTransport._set_extrac             C   s   dS )NTr%   )r   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 )NT)r   r   r   r   rM   rO   rx   )r   r%   r%   r&   r|     s
    
z"_ProactorSocketTransport.write_eof)NNN)r*   rR   rS   rT   r   Z_SendfileModeZ
TRY_NATIVEZ_sendfile_compatibler   r   r{   r|   rU   r%   r%   )r$   r&   r     s    r   c                   s   e Zd Z fddZd1ddZd2dddddddd	Zd3d
dZd4ddZd5d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d6d$d%Zd&d' Zd7d)d*Zd+d, Zd-d. Zd/d0 Z  ZS )8r   c                sH   t    td|jj || _|| _d | _i | _	|
|  |   d S )NzUsing proactor: %s)r   r   r   rE   r$   r*   rc   	_selector_self_reading_future_accept_futuresZset_loop_make_self_pipe)r   Zproactor)r$   r%   r&   r     s    

zBaseProactorEventLoop.__init__Nc             C   s   t | |||||S )N)r   )r   r   r    r!   r"   r#   r%   r%   r&   _make_socket_transport  s    
z,BaseProactorEventLoop._make_socket_transportF)server_sideserver_hostnamer"   r#   ssl_handshake_timeoutc         	   C   s0   t j| ||||||	d}
t| ||
||d |
jS )N)r   )r"   r#   )r	   ZSSLProtocolr   Z_app_transport)r   Zrawsockr    
sslcontextr!   r   r   r"   r#   r   Zssl_protocolr%   r%   r&   _make_ssl_transport  s    
z)BaseProactorEventLoop._make_ssl_transportc             C   s   t | ||||S )N)r   )r   r   r    r!   r"   r%   r%   r&   _make_duplex_pipe_transport  s    z1BaseProactorEventLoop._make_duplex_pipe_transportc             C   s   t | ||||S )N)rV   )r   r   r    r!   r"   r%   r%   r&   _make_read_pipe_transport  s    z/BaseProactorEventLoop._make_read_pipe_transportc             C   s   t | ||||S )N)r   )r   r   r    r!   r"   r%   r%   r&   _make_write_pipe_transport  s    z0BaseProactorEventLoop._make_write_pipe_transportc                sP   |   rtd|  rd S |   |   | j  d | _d | _t   d S )Nz!Cannot close a running event loop)	Z
is_runningrr   	is_closed_stop_accept_futures_close_self_piperc   r8   r   r   )r   )r$   r%   r&   r8     s    
zBaseProactorEventLoop.closec                s   | j ||I d H S )N)rc   rd   )r   r   nr%   r%   r&   	sock_recv   s    zBaseProactorEventLoop.sock_recvc                s   | j ||I d H S )N)rc   Z	recv_into)r   r   Zbufr%   r%   r&   sock_recv_into#  s    z$BaseProactorEventLoop.sock_recv_intoc                s   | j ||I d H S )N)rc   ry   )r   r   r]   r%   r%   r&   sock_sendall&  s    z"BaseProactorEventLoop.sock_sendallc                s   | j ||I d H S )N)rc   Zconnect)r   r   Zaddressr%   r%   r&   sock_connect)  s    z"BaseProactorEventLoop.sock_connectc                s   | j |I d H S )N)rc   accept)r   r   r%   r%   r&   sock_accept,  s    z!BaseProactorEventLoop.sock_acceptc          
      s(  y|  }W n2 ttjfk
r> } ztdW d d }~X Y nX yt|j}W n, t	k
r| } ztdW d d }~X Y nX |r|n|}|sdS t
|d}|rt
|| |n|}	t
||}d}
zLxFt
|	| |}|dkr|
S | j||||I d H  ||7 }|
|7 }
qW W d |
dkr"|| X d S )Nznot a regular filer   l    )r,   r   ioUnsupportedOperationr   ZSendfileNotAvailableErrorosfstatst_sizerC   minrc   sendfileseek)r   r   fileoffsetcountr,   errZfsizeZ	blocksizeZend_posZ
total_sentr%   r%   r&   _sock_sendfile_native/  s2    


z+BaseProactorEventLoop._sock_sendfile_nativec                sV   |  }|  | I d H  z| j|j|||ddI d H S |  |rP|  X d S )NF)Zfallback)rZ   r[   r~   Zsock_sendfiler   r   r^   )r   Ztranspr   r   r   r^   r%   r%   r&   _sendfile_nativeL  s    z&BaseProactorEventLoop._sendfile_nativec             C   sL   | j d k	r| j   d | _ | j  d | _| j  d | _|  jd8  _d S )Nr   )r   r7   _ssockr8   _csock_internal_fds)r   r%   r%   r&   r   X  s    



z&BaseProactorEventLoop._close_self_pipec             C   sF   t  \| _| _| jd | jd |  jd7  _| | j d S )NFr   )rO   Z
socketpairr   r   Zsetblockingr   r   _loop_self_reading)r   r%   r%   r&   r   b  s
    z%BaseProactorEventLoop._make_self_pipec          
   C   s   y$|d k	r|   | j| jd}W nH tjk
r:   d S  tk
rl } z| d|| d W d d }~X Y nX || _|	| j
 d S )Ni   z.Error on reading from the event loop self pipe)r@   rA   r   )rb   rc   rd   r   r   rg   r_   rF   r   rh   r   )r   rz   rH   r%   r%   r&   r   j  s    z(BaseProactorEventLoop._loop_self_readingc             C   s>   y| j d W n( tk
r8   | jr4tjddd Y nX d S )N    z3Fail to write a null byte into the self-pipe socketT)r?   )r   ry   rC   _debugr   rE   )r   r%   r%   r&   _write_to_self|  s    z$BaseProactorEventLoop._write_to_selfd   c                s(   d fdd	    d S )Nc          
      s$  y| d k	rn|   \}}jr,td||  }d k	rXj||dd|id nj||d|id  rzd S j} W n~ t	k
r } zB
 dkrd|d   njrtjd	dd
 W d d }~X Y n8 tjk
r     Y nX | j
 < |   d S )Nz#%r got a new connection from %r: %rTr   )r   r"   r#   r   )r"   r#   zAccept failed on a socket)r@   rA   rO   zAccept failed on socket %r)r?   )rb   r   r   rE   r   r   r   rc   r   rC   r,   rF   r8   r   rg   r   rh   )rz   ZconnZaddrr    rH   )r   protocol_factoryr   r#   r   r   r   r%   r&   r     s@    



z2BaseProactorEventLoop._start_serving.<locals>.loop)N)r   )r   r   r   r   r#   Zbacklogr   r%   )r   r   r   r#   r   r   r   r&   _start_serving  s    %z$BaseProactorEventLoop._start_servingc             C   s   d S )Nr%   )r   Z
event_listr%   r%   r&   _process_events  s    z%BaseProactorEventLoop._process_eventsc             C   s*   x| j  D ]}|  qW | j   d S )N)r   valuesr7   clear)r   futurer%   r%   r&   r     s    z*BaseProactorEventLoop._stop_accept_futuresc             C   s6   | j | d }|r|  | j| |  d S )N)r   popr,   r7   rc   _stop_servingr8   )r   r   r   r%   r%   r&   r     s
    z#BaseProactorEventLoop._stop_serving)NNN)N)NN)NN)NN)N)NNr   N)r*   rR   rS   r   r   r   r   r   r   r8   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   r%   r%   )r$   r&   r     s<   
 
	 
 
 



 
)r   )rT   __all__r   r   rO   r:    r   r   r   r   r   r	   r
   logr   Z_FlowControlMixinZBaseTransportr   ZReadTransportrV   ZWriteTransportrj   r   Z	Transportr   r   ZBaseEventLoopr   r%   r%   r%   r&   <module>   s:     m
'