ÿØÿà 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
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3

  \i                 @   s  d 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
rT   ddlZY nX ddl	m
Z
 ddlmZ ddddd	d
dddg	Zeedrejdddg eedrej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rG dd dZG dd dZeedrXG 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j | _d| _d S )NF)server_addressRequestHandlerClass	threadingZEvent_BaseServer__is_shut_down_BaseServer__shutdown_request)selfr   r    r   $/usr/lib64/python3.6/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   sx   | j j  zVt F}|j| tj x0| jsR|j|}| jr<P |rH| j  | j	  q$W W d Q R X W d d| _| j j
  X d S )NF)r   clear_ServerSelectorregister	selectors
EVENT_READr   select_handle_request_noblockservice_actionsset)r   Zpoll_intervalselectorreadyr   r   r   serve_forever   s    

zBaseServer.serve_foreverc             C   s   d| _ | jj  d S )NT)r   r   wait)r   r   r   r   shutdown   s    zBaseServer.shutdownc             C   s   d S )Nr   )r   r   r   r   r)     s    zBaseServer.service_actionsc          
   C   s   | j j }|d kr| j}n| jd k	r0t|| j}|d k	rBt | }t R}|j| tj x<|j	|}|rp| j
 S |d k	rZ|t  }|dk rZ| j S qZW W d Q R X d S )Nr   )socketZ
gettimeouttimeoutmintimer#   r$   r%   r&   r'   r(   handle_timeout)r   r1   Zdeadliner+   r,   r   r   r   handle_request  s"    




zBaseServer.handle_requestc             C   s   y| j  \}}W n tk
r$   d S X | j||ry| j|| W q tk
rl   | j|| | j| Y q   | j|  Y qX n
| j| d S )N)get_requestOSErrorverify_requestprocess_request	Exceptionhandle_errorshutdown_request)r   requestclient_addressr   r   r   r(   3  s    

z"BaseServer._handle_request_noblockc             C   s   d S )Nr   )r   r   r   r   r4   J  s    zBaseServer.handle_timeoutc             C   s   dS )NTr   )r   r=   r>   r   r   r   r8   Q  s    zBaseServer.verify_requestc             C   s   | j || | j| d S )N)finish_requestr<   )r   r=   r>   r   r   r   r9   Y  s    zBaseServer.process_requestc             C   s   d S )Nr   )r   r   r   r   server_closeb  s    zBaseServer.server_closec             C   s   | j |||  d S )N)r   )r   r=   r>   r   r   r   r?   j  s    zBaseServer.finish_requestc             C   s   | j | d S )N)close_request)r   r=   r   r   r   r<   n  s    zBaseServer.shutdown_requestc             C   s   d S )Nr   )r   r=   r   r   r   rA   r  s    zBaseServer.close_requestc             C   sH   t dd tjd t d|tjd dd l}|j  t dd tjd d S )N-(   )filez4Exception happened during processing of request fromr   )printsysstderr	traceback	print_exc)r   r=   r>   rH   r   r   r   r;   v  s    zBaseServer.handle_errorc             C   s   | S )Nr   )r   r   r   r   	__enter__  s    zBaseServer.__enter__c             G   s   | j   d S )N)r@   )r   argsr   r   r   __exit__  s    zBaseServer.__exit__)r!   )__name__
__module____qualname__r1   r   r    r-   r/   r)   r5   r(   r4   r8   r9   r@   r?   r<   rA   r;   rJ   rL   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 j| || tj| j| j| _|rPy| j  | j  W n   | j   Y nX d S )N)r   r   r0   address_familysocket_typeserver_bindr    r@   )r   r   r   Zbind_and_activater   r   r   r     s    
zTCPServer.__init__c             C   s8   | j r| jjtjtjd | jj| j | jj | _d S )N   )allow_reuse_addressr0   
setsockoptZ
SOL_SOCKETZSO_REUSEADDRZbindr   Zgetsockname)r   r   r   r   rS     s    zTCPServer.server_bindc             C   s   | j j| j d S )N)r0   Zlistenrequest_queue_size)r   r   r   r   r      s    zTCPServer.server_activatec             C   s   | j j  d S )N)r0   close)r   r   r   r   r@     s    zTCPServer.server_closec             C   s
   | j j S )N)r0   fileno)r   r   r   r   rY     s    zTCPServer.filenoc             C   s
   | j j S )N)r0   Zaccept)r   r   r   r   r6     s    zTCPServer.get_requestc             C   s4   y|j tj W n tk
r$   Y nX | j| d S )N)r/   r0   ZSHUT_WRr7   rA   )r   r=   r   r   r   r<     s
    zTCPServer.shutdown_requestc             C   s   |j   d S )N)rX   )r   r=   r   r   r   rA     s    zTCPServer.close_requestN)T)rM   rN   rO   r0   ZAF_INETrQ   ZSOCK_STREAMrR   rW   rU   r   rS   r    r@   rY   r6   r<   rA   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\}}|| j f|fS )N)r0   Zrecvfrommax_packet_size)r   dataZclient_addrr   r   r   r6     s    zUDPServer.get_requestc             C   s   d S )Nr   )r   r   r   r   r      s    zUDPServer.server_activatec             C   s   | j | d S )N)rA   )r   r=   r   r   r   r<     s    zUDPServer.shutdown_requestc             C   s   d S )Nr   )r   r=   r   r   r   rA     s    zUDPServer.close_requestN)rM   rN   rO   rU   r0   Z
SOCK_DGRAMrR   rZ   r6   r    r<   rA   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,  NrC   F)blockingc            C   s   | j d krd S xht| j | jkrvy tjdd\}}| j j| W q tk
r^   | j j  Y q tk
rr   P Y qX qW xt| j j	 D ]f}y.|rdntj
}tj||\}}| j j| W q tk
r   | j j| Y q tk
r   Y qX qW d S )NrT   r   )active_childrenlenmax_childrenoswaitpiddiscardChildProcessErrorr"   r7   copyWNOHANG)r   r\   pid_flagsr   r   r   collect_children,  s&    
zForkingMixIn.collect_childrenc             C   s   | j   d S )N)rj   )r   r   r   r   r4   O  s    zForkingMixIn.handle_timeoutc             C   s   | j   d S )N)rj   )r   r   r   r   r)   V  s    zForkingMixIn.service_actionsc             C   s   t j }|r8| jd krt | _| jj| | j| d S d}z:y| j|| d}W n  tk
rr   | j|| Y nX W d z| j	| W d t j
| X X d S )NrT   r   )ra   r   r^   r*   addrA   r?   r:   r;   r<   _exit)r   r=   r>   rg   Zstatusr   r   r   r9   ]  s     

zForkingMixIn.process_requestc                s   t  j  | j| jd d S )N)r\   )superr@   rj   _block_on_close)r   )	__class__r   r   r@   v  s    
zForkingMixIn.server_close)rM   rN   rO   r1   r^   r`   rn   rj   r4   r)   r9   r@   __classcell__r   r   )ro   r   r   #  s   #c                   s8   e Zd ZdZdZdZdd Zdd Z fddZ  Z	S )	r   FNc             C   sH   z6y| j || W n  tk
r2   | j|| Y nX W d | j| X d S )N)r?   r:   r;   r<   )r   r=   r>   r   r   r   process_request_thread  s
    z%ThreadingMixIn.process_request_threadc             C   sR   t j| j||fd}| j|_|j rF| jrF| jd kr:g | _| jj| |j  d S )N)targetrK   )	r   ZThreadrq   daemon_threadsZdaemonrn   _threadsappendstart)r   r=   r>   tr   r   r   r9     s    
zThreadingMixIn.process_requestc                s:   t  j  | jr6| j}d | _|r6x|D ]}|j  q&W d S )N)rm   r@   rn   rt   join)r   ZthreadsZthread)ro   r   r   r@     s    

zThreadingMixIn.server_close)
rM   rN   rO   rs   rn   rt   rq   r9   r@   rp   r   r   )ro   r   r   {  s   c               @   s   e Zd ZdS )r   N)rM   rN   rO   r   r   r   r   r     s    c               @   s   e Zd ZdS )r   N)rM   rN   rO   r   r   r   r   r     s    c               @   s   e Zd ZdS )r   N)rM   rN   rO   r   r   r   r   r     s    c               @   s   e Zd ZdS )r   N)rM   rN   rO   r   r   r   r   r     s    c               @   s   e Zd ZejZdS )r   N)rM   rN   rO   r0   r   rQ   r   r   r   r   r     s   c               @   s   e Zd ZejZdS )r   N)rM   rN   rO   r0   r   rQ   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)rM   rN   rO   r   r   r   r   r     s    c               @   s   e Zd ZdS )r   N)rM   rN   rO   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   || _ || _|| _| j  z| j  W d | j  X d S )N)r=   r>   serversetuphandlefinish)r   r=   r>   ry   r   r   r   r     s    zBaseRequestHandler.__init__c             C   s   d S )Nr   )r   r   r   r   rz     s    zBaseRequestHandler.setupc             C   s   d S )Nr   )r   r   r   r   r{     s    zBaseRequestHandler.handlec             C   s   d S )Nr   )r   r   r   r   r|     s    zBaseRequestHandler.finishN)rM   rN   rO   r   rz   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
   rT   r   NFc             C   sz   | j | _| jd k	r | jj| j | jr:| jjtjtjd | jj	d| j
| _| jdkrdt| j| _n| jj	d| j| _d S )NTrbr   wb)r=   Z
connectionr1   Z
settimeoutdisable_nagle_algorithmrV   r0   ZIPPROTO_TCPZTCP_NODELAYmakefilerbufsizerfilewbufsize_SocketWriterwfile)r   r   r   r   rz     s    



zStreamRequestHandler.setupc             C   sF   | j js.y| j j  W n tjk
r,   Y nX | j j  | jj  d S )N)r   closedflushr0   errorrX   r   )r   r   r   r   r|     s    
zStreamRequestHandler.finishr]   )	rM   rN   rO   r   r   r1   r   rz   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 )N)_sock)r   Zsockr   r   r   r     s    z_SocketWriter.__init__c             C   s   dS )NTr   )r   r   r   r   writable  s    z_SocketWriter.writablec          	   C   s&   | j j| t|}|jS Q R X d S )N)r   Zsendall
memoryviewnbytes)r   bZviewr   r   r   write"  s    
z_SocketWriter.writec             C   s
   | j j S )N)r   rY   )r   r   r   r   rY   '  s    z_SocketWriter.filenoN)rM   rN   rO   r   r   r   rY   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   r=   Zpacketr0   r   r   )r   r   r   r   r   rz   .  s    zDatagramRequestHandler.setupc             C   s   | j j| jj | j d S )N)r0   Zsendtor   getvaluer>   )r   r   r   r   r|   4  s    zDatagramRequestHandler.finishN)rM   rN   rO   rz   r|   r   r   r   r   r   *  s   )$__version__r0   r%   ra   errnorF   r   ImportErrorZdummy_threadingr   r   r3   r   __all__hasattrextendr   r#   ZSelectSelectorr   r   r   r   r   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   <module>{   sZ   


 n~X..-