ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     U
    e5dj                  	   @   s   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mZ ddlm	Z ddddd	d
dddg	Z
eedrte
dddg eedre
ddddg eedrejZnejZG dd dZG dd deZG dd deZeedrG dd dZG dd deZG dd dZG d d dZeedrJG d!d deeZG d"d deeZG d#d deeZG d$d	 d	eeZeedrG d%d deZG d&d deZG d'd deeZG d(d deeZG d)d
 d
Z G d*d de Z!G d+d, d,eZ"G d-d de Z#dS ).z0.4    N)BufferedIOBase)	monotonic
BaseServer	TCPServer	UDPServerThreadingUDPServerThreadingTCPServerBaseRequestHandlerStreamRequestHandlerDatagramRequestHandlerThreadingMixInforkForkingUDPServerForkingTCPServerForkingMixInAF_UNIXUnixStreamServerUnixDatagramServerThreadingUnixStreamServerThreadingUnixDatagramServerPollSelectorc                   @   s   e Zd ZdZ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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S )&r   Nc                 C   s    || _ || _t | _d| _d S NF)server_addressRequestHandlerClass	threadingZEvent_BaseServer__is_shut_down_BaseServer__shutdown_request)selfr   r    r   $/usr/lib64/python3.8/socketserver.py__init__   s    
zBaseServer.__init__c                 C   s   d S Nr   r   r   r   r   server_activate   s    zBaseServer.server_activate      ?c              	   C   st   | j   zRt B}|| tj | jsP||}| jr:qP|rF| 	  | 
  q"W 5 Q R X W 5 d| _| j   X d S r   )r   clearr   set_ServerSelectorregister	selectors
EVENT_READselect_handle_request_noblockservice_actions)r   Zpoll_intervalselectorreadyr   r   r   serve_forever   s    

zBaseServer.serve_foreverc                 C   s   d| _ | j  d S NT)r   r   waitr"   r   r   r   shutdown   s    zBaseServer.shutdownc                 C   s   d S r!   r   r"   r   r   r   r-      s    zBaseServer.service_actionsc              
   C   s   | j  }|d kr| j}n| jd k	r0t|| j}|d k	rBt | }t f}|| tj |	|}|rz| 
 W  5 Q R  S |d k	rX|t  }|dk rX|  W  5 Q R  S qXW 5 Q R X d S )Nr   )socketZ
gettimeouttimeoutmintimer'   r(   r)   r*   r+   r,   handle_timeout)r   r5   Zdeadliner.   r/   r   r   r   handle_request  s     




zBaseServer.handle_requestc                 C   s   z|   \}}W n tk
r&   Y d S X | ||rz| || W q tk
rn   | || | | Y q   | |  Y qX n
| | d S r!   )get_requestOSErrorverify_requestprocess_request	Exceptionhandle_errorshutdown_requestr   requestclient_addressr   r   r   r,   /  s    

z"BaseServer._handle_request_noblockc                 C   s   d S r!   r   r"   r   r   r   r8   F  s    zBaseServer.handle_timeoutc                 C   s   dS r1   r   rA   r   r   r   r<   M  s    zBaseServer.verify_requestc                 C   s   |  || | | d S r!   )finish_requestr@   rA   r   r   r   r=   U  s    zBaseServer.process_requestc                 C   s   d S r!   r   r"   r   r   r   server_close^  s    zBaseServer.server_closec                 C   s   |  |||  d S r!   )r   rA   r   r   r   rD   f  s    zBaseServer.finish_requestc                 C   s   |  | d S r!   close_requestr   rB   r   r   r   r@   j  s    zBaseServer.shutdown_requestc                 C   s   d S r!   r   rH   r   r   r   rG   n  s    zBaseServer.close_requestc                 C   s@   t dtjd t d|tjd dd l}|  t dtjd d S )Nz(----------------------------------------)filez4Exception happened during processing of request fromr   )printsysstderr	traceback	print_exc)r   rB   rC   rM   r   r   r   r?   r  s     zBaseServer.handle_errorc                 C   s   | S r!   r   r"   r   r   r   	__enter__  s    zBaseServer.__enter__c                 G   s   |    d S r!   )rE   )r   argsr   r   r   __exit__  s    zBaseServer.__exit__)r$   )__name__
__module____qualname__r5   r    r#   r0   r3   r-   r9   r,   r8   r<   r=   rE   rD   r@   rG   r?   rO   rQ   r   r   r   r   r      s$   -

	c                   @   sb   e Zd ZejZejZdZ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dS )r      FTc                 C   sT   t | || t| j| j| _|rPz|   |   W n   |    Y nX d S r!   )r   r    r4   address_familysocket_typeserver_bindr#   rE   )r   r   r   Zbind_and_activater   r   r   r      s    zTCPServer.__init__c                 C   s8   | j r| jtjtjd | j| j | j | _d S )N   )allow_reuse_addressr4   
setsockoptZ
SOL_SOCKETZSO_REUSEADDRZbindr   Zgetsocknamer"   r   r   r   rX     s    zTCPServer.server_bindc                 C   s   | j | j d S r!   )r4   Zlistenrequest_queue_sizer"   r   r   r   r#     s    zTCPServer.server_activatec                 C   s   | j   d S r!   )r4   closer"   r   r   r   rE     s    zTCPServer.server_closec                 C   s
   | j  S r!   )r4   filenor"   r   r   r   r^     s    zTCPServer.filenoc                 C   s
   | j  S r!   )r4   Zacceptr"   r   r   r   r:     s    zTCPServer.get_requestc                 C   s4   z| tj W n tk
r$   Y nX | | d S r!   )r3   r4   ZSHUT_WRr;   rG   rH   r   r   r   r@     s
    zTCPServer.shutdown_requestc                 C   s   |   d S r!   )r]   rH   r   r   r   rG     s    zTCPServer.close_requestN)T)rR   rS   rT   r4   ZAF_INETrV   ZSOCK_STREAMrW   r\   rZ   r    rX   r#   rE   r^   r:   r@   rG   r   r   r   r   r     s   /

c                   @   s:   e Zd ZdZejZdZdd Zdd Z	dd Z
d	d
 ZdS )r   Fi    c                 C   s    | j | j\}}|| j f|fS r!   )r4   Zrecvfrommax_packet_size)r   dataZclient_addrr   r   r   r:     s    zUDPServer.get_requestc                 C   s   d S r!   r   r"   r   r   r   r#     s    zUDPServer.server_activatec                 C   s   |  | d S r!   rF   rH   r   r   r   r@     s    zUDPServer.shutdown_requestc                 C   s   d S r!   r   rH   r   r   r   rG     s    zUDPServer.close_requestN)rR   rS   rT   rZ   r4   Z
SOCK_DGRAMrW   r_   r:   r#   r@   rG   r   r   r   r   r     s   c                       sR   e Zd ZdZdZdZdZddddZd	d
 Zdd Z	dd Z
 fddZ  ZS )r   i,  N(   TFblockingc             	   C   s   | j d krd S t| j | jkrvz tdd\}}| j | W q tk
r\   | j   Y q tk
rr   Y qvY qX q| j 	 D ]f}z.|rdntj
}t||\}}| j | W q tk
r   | j | Y q tk
r   Y qX qd S )Nr   )active_childrenlenmax_childrenoswaitpiddiscardChildProcessErrorr%   r;   copyWNOHANG)r   rc   pid_flagsr   r   r   collect_children(  s&    
zForkingMixIn.collect_childrenc                 C   s   |    d S r!   rq   r"   r   r   r   r8   K  s    zForkingMixIn.handle_timeoutc                 C   s   |    d S r!   rr   r"   r   r   r   r-   R  s    zForkingMixIn.service_actionsc                 C   s   t  }|r8| jd krt | _| j| | | d S d}z:z| || d}W n  t	k
rr   | 
|| Y nX W 5 z| | W 5 t | X X d S )NrY   r   )rh   r   re   r&   addrG   _exitr@   rD   r>   r?   )r   rB   rC   rn   Zstatusr   r   r   r=   Y  s     

zForkingMixIn.process_requestc                    s   t    | j| jd d S )Nrb   )superrE   rq   block_on_closer"   	__class__r   r   rE   r  s    
zForkingMixIn.server_close)rR   rS   rT   r5   re   rg   rv   rq   r8   r-   r=   rE   __classcell__r   r   rw   r   r     s   #c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	_Threadsc                    s"   |    |jrd S t | d S r!   )reapdaemonru   appendr   threadrw   r   r   r}   {  s    z_Threads.appendc                 C   s   g | d d   | d d < }|S r!   r   )r   resultr   r   r   pop_all  s    z_Threads.pop_allc                 C   s   |   D ]}|  qd S r!   )r   joinr~   r   r   r   r     s    z_Threads.joinc                 C   s   dd | D | d d < d S )Nc                 s   s   | ]}|  r|V  qd S r!   )Zis_alive).0r   r   r   r   	<genexpr>  s      z _Threads.reap.<locals>.<genexpr>r   r"   r   r   r   r{     s    z_Threads.reap)rR   rS   rT   r}   r   r   r{   ry   r   r   rw   r   rz   w  s   rz   c                   @   s   e Zd Zdd Zdd ZdS )
_NoThreadsc                 C   s   d S r!   r   r~   r   r   r   r}     s    z_NoThreads.appendc                 C   s   d S r!   r   r"   r   r   r   r     s    z_NoThreads.joinN)rR   rS   rT   r}   r   r   r   r   r   r     s   r   c                       s:   e Zd ZdZdZe Zdd Zdd Z fddZ	  Z
S )	r   FTc              	   C   sH   z6z| || W n  tk
r2   | || Y nX W 5 |  | X d S r!   )r@   rD   r>   r?   rA   r   r   r   process_request_thread  s
    z%ThreadingMixIn.process_request_threadc                 C   sL   | j rt| dt  tj| j||fd}| j|_| j	
| |  d S )N_threads)targetrP   )rv   vars
setdefaultrz   r   ZThreadr   daemon_threadsr|   r   r}   start)r   rB   rC   tr   r   r   r=     s    zThreadingMixIn.process_requestc                    s   t    | j  d S r!   )ru   rE   r   r   r"   rw   r   r   rE     s    
zThreadingMixIn.server_close)rR   rS   rT   r   rv   r   r   r   r=   rE   ry   r   r   rw   r   r     s   
c                   @   s   e Zd ZdS )r   NrR   rS   rT   r   r   r   r   r     s    c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r     s    c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r     s    c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r     s    c                   @   s   e Zd ZejZdS )r   NrR   rS   rT   r4   r   rV   r   r   r   r   r     s   c                   @   s   e Zd ZejZdS )r   Nr   r   r   r   r   r     s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r     s    c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r     s    c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r	   c                 C   s6   || _ || _|| _|   z|   W 5 |   X d S r!   )rB   rC   serversetupfinishhandle)r   rB   rC   r   r   r   r   r      s    zBaseRequestHandler.__init__c                 C   s   d S r!   r   r"   r   r   r   r     s    zBaseRequestHandler.setupc                 C   s   d S r!   r   r"   r   r   r   r     s    zBaseRequestHandler.handlec                 C   s   d S r!   r   r"   r   r   r   r     s    zBaseRequestHandler.finishN)rR   rS   rT   r    r   r   r   r   r   r   r   r	     s   
c                   @   s,   e Zd ZdZdZdZdZdd Zdd ZdS )	r
   rd   r   NFc                 C   sz   | j | _| jd k	r | j| j | jr:| jtjtjd | j	d| j
| _| jdkrdt| j| _n| j	d| j| _d S )NTrbr   wb)rB   Z
connectionr5   Z
settimeoutdisable_nagle_algorithmr[   r4   ZIPPROTO_TCPZTCP_NODELAYZmakefilerbufsizerfilewbufsize_SocketWriterwfiler"   r   r   r   r     s    

 
zStreamRequestHandler.setupc                 C   sF   | j js.z| j   W n tjk
r,   Y nX | j   | j  d S r!   )r   closedflushr4   errorr]   r   r"   r   r   r   r   #  s    
zStreamRequestHandler.finish)	rR   rS   rT   r   r   r5   r   r   r   r   r   r   r   r
     s   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C   s
   || _ d S r!   )_sock)r   Zsockr   r   r   r    3  s    z_SocketWriter.__init__c                 C   s   dS r1   r   r"   r   r   r   writable6  s    z_SocketWriter.writablec              
   C   s2   | j | t|}|jW  5 Q R  S Q R X d S r!   )r   Zsendall
memoryviewnbytes)r   bZviewr   r   r   write9  s    
z_SocketWriter.writec                 C   s
   | j  S r!   )r   r^   r"   r   r   r   r^   >  s    z_SocketWriter.filenoN)rR   rS   rT   r    r   r   r^   r   r   r   r   r   .  s   r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s2   ddl m} | j\| _| _|| j| _| | _d S )Nr   )BytesIO)ior   rB   Zpacketr4   r   r   )r   r   r   r   r   r   E  s    zDatagramRequestHandler.setupc                 C   s   | j | j | j d S r!   )r4   Zsendtor   getvaluerC   r"   r   r   r   r   K  s    zDatagramRequestHandler.finishN)rR   rS   rT   r   r   r   r   r   r   r   A  s   )$__version__r4   r)   rh   rK   r   r   r   r7   r   __all__hasattrextendr   r'   ZSelectSelectorr   r   r   r   listrz   r   r   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   <module>{   s`      


 n~
X(.-