ÿØÿà 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
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     B
     fN                 @   sh  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mZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ eeeeeeehZye W n ek
r   i ZY nX dd ZG dd deZeeefZdd	 Zd
d Z dd Z!dd Z"d&ddZ#d'ddZ$e$Z%d(ddZ&G dd dZ'G dd de'Z(dd Z)d)dd Z*ej+d!krdG d"d# d#Z,G d$d% d%e'Z-dS )*a  Basic infrastructure for asynchronous socket service clients and servers.

There are only two ways to have a program on a single processor do "more
than one thing at a time".  Multi-threaded programming is the simplest and
most popular way to do it, but there is another very different technique,
that lets you have nearly all the advantages of multi-threading, without
actually using multiple threads. it's really only practical if your program
is largely I/O bound. If your program is CPU bound, then pre-emptive
scheduled threads are probably what you really need. Network servers are
rarely CPU-bound, however.

If your operating system supports the select() system call in its I/O
library (and nearly all do), then you can use it to juggle multiple
communication channels at once; doing other work while your I/O is taking
place in the "background."  Although this strategy can seem strange and
complex, especially at first, it is in many ways easier to understand and
control than multi-threaded programming. The module documented here solves
many of the difficult problems for you, making the task of building
sophisticated high-performance network servers and clients a snap.
    N)EALREADYEINPROGRESSEWOULDBLOCK
ECONNRESETEINVALENOTCONN	ESHUTDOWNEISCONNEBADFECONNABORTEDEPIPEEAGAIN	errorcodec          
   C   s>   y
t | S  tttfk
r8   | tkr0t|  S d|  S X d S )NzUnknown error %s)osstrerror
ValueErrorOverflowError	NameErrorr   )err r   -/opt/alt/python37/lib64/python3.7/asyncore.py	_strerrorD   s    
r   c               @   s   e Zd ZdS )ExitNowN)__name__
__module____qualname__r   r   r   r   r   L   s   r   c             C   s:   y|    W n( tk
r"    Y n   |   Y nX d S )N)handle_read_event_reraised_exceptionshandle_error)objr   r   r   readQ   s    r    c             C   s:   y|    W n( tk
r"    Y n   |   Y nX d S )N)handle_write_eventr   r   )r   r   r   r   writeY   s    r"   c             C   s:   y|    W n( tk
r"    Y n   |   Y nX d S )N)handle_expt_eventr   r   )r   r   r   r   
_exceptiona   s    r$   c          
   C   s   yX|t j@ r|   |t j@ r&|   |t j@ r8|   |t jt jB t j	B @ rV| 
  W nh tk
r } z$|jd tkr|   n| 
  W d d }~X Y n( tk
r    Y n   |   Y nX d S )Nr   )selectPOLLINr   POLLOUTr!   POLLPRIr#   ZPOLLHUPZPOLLERRZPOLLNVALhandle_closeOSErrorargs_DISCONNECTEDr   r   )r   flagser   r   r   	readwritei   s"    



r/           c       	      C   sL  |d krt }|rHg }g }g }x\t| D ]L\}}| }| }|rR|| |rf|jsf|| |sn|r,|| q,W g |  kr|  kr|krn nt|  d S t		|||| \}}}x(|D ] }|
|}|d krqt| qW x*|D ]"}|
|}|d krqt| qW x.|D ]&}|
|}|d kr:qt| qW d S )N)
socket_maplistitemsreadablewritableappend	acceptingtimeZsleepr%   getr    r"   r$   )	timeoutmaprwr.   fdr   Zis_rZis_wr   r   r   poll}   sD      


"








r?   c             C   s   |d krt }| d k	r t| d } t }|rx\t| D ]L\}}d}| r^|tjtjB O }|	 rv|j
sv|tjO }|r:||| q:W || }x.|D ]&\}}||}|d krqt|| qW d S )Ni  r   )r1   intr%   r?   r2   r3   r4   r&   r(   r5   r7   r'   registerr9   r/   )r:   r;   Zpollsterr>   r   r-   r<   r   r   r   poll2   s(    


rB         >@Fc             C   sj   |d krt }|r ttdr t}nt}|d krBx8|r>|| | q.W n$x"|rd|dkrd|| | |d }qDW d S )Nr?   r      )r1   hasattrr%   rB   r?   )r:   Zuse_pollr;   countZpoll_funr   r   r   loop   s    
rG   c               @   s6  e Zd ZdZdZdZdZdZdZe	dhZ
dAddZdd ZeZdBdd	ZdCd
dZejejfddZdDd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dEd'd(Z d)d* Z!d+d, Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'd7d8 Z(d9d: Z)d;d< Z*d=d> Z+d?d@ Z,dS )F
dispatcherFNwarningc          
   C   s   |d krt | _n|| _d | _|r|d | || d| _y| | _W q tk
r } z*|j	d t
tfkrvd| _n| |  W d d }~X Y qX nd | _d S )Nr   TF)r1   _map_filenosetblocking
set_socket	connectedZgetpeernameaddrr*   r+   r   r   del_channelsocket)selfsockr;   r   r   r   r   __init__   s     

zdispatcher.__init__c             C   s   | j jd | j j g}| jr.| jr.|d n| jr>|d | jd k	ry|d| j  W n$ tk
r   |t| j Y nX dd	|t
| f S )N.Z	listeningrN   z%s:%dz<%s at %#x> )	__class__r   r   r7   rO   r6   rN   	TypeErrorreprjoinid)rR   Zstatusr   r   r   __repr__   s    

zdispatcher.__repr__c             C   s   |d kr| j }| || j< d S )N)rJ   rK   )rR   r;   r   r   r   add_channel  s    zdispatcher.add_channelc             C   s,   | j }|d kr| j}||kr"||= d | _ d S )N)rK   rJ   )rR   r;   r>   r   r   r   rP     s    zdispatcher.del_channelc             C   s.   ||f| _ t||}|d | | d S )Nr   )Zfamily_and_typerQ   rL   rM   )rR   ZfamilytyperS   r   r   r   create_socket  s    

zdispatcher.create_socketc             C   s   || _ | | _| | d S )N)rQ   filenorK   r]   )rR   rS   r;   r   r   r   rM      s    
zdispatcher.set_socketc             C   sD   y*| j t jt j| j t jt jdB  W n tk
r>   Y nX d S )NrD   )rQ   Z
setsockopt
SOL_SOCKETZSO_REUSEADDR
getsockoptr*   )rR   r   r   r   set_reuse_addr%  s    
zdispatcher.set_reuse_addrc             C   s   dS )NTr   )rR   r   r   r   r4   6  s    zdispatcher.readablec             C   s   dS )NTr   )rR   r   r   r   r5   9  s    zdispatcher.writablec             C   s(   d| _ tjdkr|dkrd}| j|S )NTnt   )r7   r   namerQ   listen)rR   Znumr   r   r   rg   @  s    zdispatcher.listenc             C   s   || _ | j|S )N)rO   rQ   bind)rR   rO   r   r   r   rh   F  s    zdispatcher.bindc             C   sp   d| _ d| _| j|}|tttfks8|tkrBtj	dkrB|| _
d S |dtfkr^|| _
|   nt|t| d S )NFTrd   r   )rN   
connectingrQ   Z
connect_exr   r   r   r   r   rf   rO   r	   handle_connect_eventr*   r   )rR   Zaddressr   r   r   r   connectJ  s    
zdispatcher.connectc          
   C   sn   y| j  \}}W nN tk
r&   d S  tk
r` } z|jd tttfkrNd S  W d d }~X Y n
X ||fS d S )Nr   )rQ   acceptrX   r*   r+   r   r   r   )rR   ZconnrO   whyr   r   r   rl   X  s    zdispatcher.acceptc          
   C   sf   y| j |}|S  tk
r` } z2|jd tkr4dS |jd tkrN|   dS  W d d }~X Y nX d S )Nr   )rQ   sendr*   r+   r   r,   r)   )rR   dataresultrm   r   r   r   rn   f  s    zdispatcher.sendc          
   C   sh   y$| j |}|s|   dS |S W n> tk
rb } z |jd tkrP|   dS  W d d }~X Y nX d S )N    r   )rQ   recvr)   r*   r+   r,   )rR   buffer_sizero   rm   r   r   r   rr   s  s    zdispatcher.recvc          
   C   sn   d| _ d| _d| _|   | jd k	rjy| j  W n6 tk
rh } z|jd tt	fkrX W d d }~X Y nX d S )NFr   )
rN   r7   ri   rP   rQ   closer*   r+   r   r
   )rR   rm   r   r   r   rt     s    
zdispatcher.closec             C   s   t jdt|  d S )Nzlog: %s
)sysstderrr"   str)rR   messager   r   r   log  s    zdispatcher.loginfoc             C   s   || j krtd||f  d S )Nz%s: %s)ignore_log_typesprint)rR   rx   r^   r   r   r   log_info  s    
zdispatcher.log_infoc             C   s:   | j r|   n&| js.| jr$|   |   n|   d S )N)r7   handle_acceptrN   ri   rj   handle_read)rR   r   r   r   r     s    

zdispatcher.handle_read_eventc             C   s@   | j t jt j}|dkr(t|t||   d| _d| _d S )Nr   TF)	rQ   rb   ra   SO_ERRORr*   r   handle_connectrN   ri   )rR   r   r   r   r   rj     s    zdispatcher.handle_connect_eventc             C   s*   | j r
d S | js| jr|   |   d S )N)r7   rN   ri   rj   handle_write)rR   r   r   r   r!     s    zdispatcher.handle_write_eventc             C   s0   | j t jt j}|dkr$|   n|   d S )Nr   )rQ   rb   ra   r   r)   handle_expt)rR   r   r   r   r   r#     s    
zdispatcher.handle_expt_eventc             C   sX   t  \}}}}yt| }W n   dt|  }Y nX | d||||f d |   d S )Nz)<__repr__(self) failed for object at %0x>z:uncaptured python exception, closing channel %s (%s:%s %s)error)compact_tracebackrY   r[   r}   r)   )rR   ZniltvtbinfoZ	self_reprr   r   r   r     s    zdispatcher.handle_errorc             C   s   |  dd d S )Nz!unhandled incoming priority eventrI   )r}   )rR   r   r   r   r     s    zdispatcher.handle_exptc             C   s   |  dd d S )Nzunhandled read eventrI   )r}   )rR   r   r   r   r     s    zdispatcher.handle_readc             C   s   |  dd d S )Nzunhandled write eventrI   )r}   )rR   r   r   r   r     s    zdispatcher.handle_writec             C   s   |  dd d S )Nzunhandled connect eventrI   )r}   )rR   r   r   r   r     s    zdispatcher.handle_connectc             C   s   |   }|d k	r| j|  d S )N)rl   handle_accepted)rR   Zpairr   r   r   r~     s    zdispatcher.handle_acceptc             C   s   |   | dd d S )Nzunhandled accepted eventrI   )rt   r}   )rR   rS   rO   r   r   r   r     s    zdispatcher.handle_acceptedc             C   s   |  dd |   d S )Nzunhandled close eventrI   )r}   rt   )rR   r   r   r   r)     s    zdispatcher.handle_close)NN)N)N)N)rz   )-r   r   r   debugrN   r7   ri   closingrO   	frozensetr{   rT   r\   __str__r]   rP   rQ   ZAF_INETZSOCK_STREAMr_   rM   rc   r4   r5   rg   rh   rk   rl   rn   rr   rt   ry   r}   r   rj   r!   r#   r   r   r   r   r   r~   r   r)   r   r   r   r   rH      sL   

 

	

rH   c               @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )dispatcher_with_sendNc             C   s   t | || d| _d S )Nrq   )rH   rT   
out_buffer)rR   rS   r;   r   r   r   rT     s    zdispatcher_with_send.__init__c             C   s.   d}t | | jd d }| j|d  | _d S )Nr   i   )rH   rn   r   )rR   Znum_sentr   r   r   initiate_send  s    z"dispatcher_with_send.initiate_sendc             C   s   |    d S )N)r   )rR   r   r   r   r     s    z!dispatcher_with_send.handle_writec             C   s   | j  pt| jS )N)rN   lenr   )rR   r   r   r   r5   
  s    zdispatcher_with_send.writablec             C   s0   | j r| dt|  | j| | _|   d S )Nz
sending %s)r   r}   rY   r   r   )rR   ro   r   r   r   rn     s    zdispatcher_with_send.send)NN)r   r   r   rT   r   r   r5   rn   r   r   r   r   r     s
   
r   c              C   s   t  \} }}g }|stdx0|rN||jjj|jjjt|j	f |j
}q W ~|d \}}}ddd |D }|||f| ||fS )Nztraceback does not existrV   c             S   s   g | ]}d | qS )z
[%s|%s|%s]r   ).0xr   r   r   
<listcomp>(  s    z%compact_traceback.<locals>.<listcomp>)ru   exc_infoAssertionErrorr6   tb_framef_codeco_filenameco_namerw   	tb_linenotb_nextrZ   )r   r   tbr   fileZfunctionlinerz   r   r   r   r     s    
r   c             C   s   | d krt } x~t|  D ]n}y|  W q tk
rb } z|jd tkrLn|sR W d d }~X Y q tk
rv    Y q   |s Y qX qW |   d S )Nr   )	r1   r2   valuesrt   r*   r+   r
   r   clear)r;   Z
ignore_allr   r   r   r   	close_all+  s     r   posixc               @   sN   e Zd Zdd Zdd Zdd Zdd Zdd
dZeZeZ	dd Z
dd Zd	S )file_wrapperc             C   s   t || _d S )N)r   dupr>   )rR   r>   r   r   r   rT   P  s    zfile_wrapper.__init__c             C   s*   | j dkrtjd|  t| d |   d S )Nr   zunclosed file %r)source)r>   warningswarnResourceWarningrt   )rR   r   r   r   __del__S  s    
zfile_wrapper.__del__c             G   s   t j| jf| S )N)r   r    r>   )rR   r+   r   r   r   rr   Y  s    zfile_wrapper.recvc             G   s   t j| jf| S )N)r   r"   r>   )rR   r+   r   r   r   rn   \  s    zfile_wrapper.sendNc             C   s(   |t jkr|t jkr|sdS tdd S )Nr   z-Only asyncore specific behaviour implemented.)rQ   ra   r   NotImplementedError)rR   levelZoptnameZbuflenr   r   r   rb   _  s
    

zfile_wrapper.getsockoptc             C   s(   | j dk rd S | j }d| _ t| d S )Nr   r   )r>   r   rt   )rR   r>   r   r   r   rt   j  s
    
zfile_wrapper.closec             C   s   | j S )N)r>   )rR   r   r   r   r`   q  s    zfile_wrapper.fileno)N)r   r   r   rT   r   rr   rn   rb   r    r"   rt   r`   r   r   r   r   r   K  s   
r   c               @   s   e Zd ZdddZdd ZdS )file_dispatcherNc             C   sP   t | d | d| _y| }W n tk
r4   Y nX | | t|d d S )NTF)rH   rT   rN   r`   AttributeErrorset_filer   set_blocking)rR   r>   r;   r   r   r   rT   v  s    
zfile_dispatcher.__init__c             C   s"   t || _| j | _|   d S )N)r   rQ   r`   rK   r]   )rR   r>   r   r   r   r     s    
zfile_dispatcher.set_file)N)r   r   r   rT   r   r   r   r   r   r   t  s   
r   )r0   N)r0   N)rC   FNN)NF).__doc__r%   rQ   ru   r8   r   r   errnor   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r,   r1   r   r   	Exceptionr   KeyboardInterrupt
SystemExitr   r    r"   r$   r/   r?   rB   Zpoll3rG   rH   r   r   r   rf   r   r   r   r   r   r   <module>/   sB   <


'

  ,
)