ÿØÿà 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
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     a
    XC?hN                     @   sf  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ze W n ey   i ZY n0 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rbG 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   sF   zt | W S  tttfy@   | tv r4t|   Y S d|   Y S 0 d S )NzUnknown error %s)osstrerror
ValueErrorOverflowError	NameErrorr   )err r   -/opt/alt/python39/lib64/python3.9/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   s8   z|    W n& ty     Y n   |   Y n0 d S N)handle_read_event_reraised_exceptionshandle_errorobjr   r   r   readQ   s    r"   c                 C   s8   z|    W n& ty     Y n   |   Y n0 d S r   )handle_write_eventr   r   r    r   r   r   writeY   s    r$   c                 C   s8   z|    W n& ty     Y n   |   Y n0 d S r   )handle_expt_eventr   r   r    r   r   r   
_exceptiona   s    r&   c              
   C   s   zX|t j@ r|   |t j@ r&|   |t j@ r8|   |t jt jB t j	B @ rV| 
  W nh ty } z,|jd tvr|   n| 
  W Y d }~n.d }~0  ty    Y n   |   Y n0 d S Nr   )selectPOLLINr   POLLOUTr#   POLLPRIr%   ZPOLLHUPZPOLLERRZPOLLNVALhandle_closeOSErrorargs_DISCONNECTEDr   r   )r!   flagser   r   r   	readwritei   s"    



r2           c           	      C   s<  |d u rt }|r8g }g }g }t| D ]L\}}| }| }|rP|| |rd|jsd|| |sl|r*|| q*g |  kr|  kr|krn nt|  d S t		|||| \}}}|D ] }|
|}|d u rqt| q|D ]"}|
|}|d u rqt| q|D ]&}|
|}|d u r,qt| qd S r   )
socket_maplistitemsreadablewritableappend	acceptingtimesleepr(   getr"   r$   r&   )	timeoutmaprwr1   fdr!   Zis_rZis_wr   r   r   poll}   s@    


"







rC   c                 C   s   |d u rt }| d ur t| d } t }|rt| D ]L\}}d}| r\|tjtjB O }|	 rt|j
st|tjO }|r8||| q8|| }|D ]&\}}||}|d u rqt|| qd S )Ni  r   )r4   intr(   rC   r5   r6   r7   r)   r+   r8   r:   r*   registerr=   r2   )r>   r?   ZpollsterrB   r!   r0   r@   r   r   r   poll2   s(    


rF         >@Fc                 C   sb   |d u rt }|r ttdr t}nt}|d u r>|r^|| | q,n |r^|dkr^|| | |d }q>d S )NrC   r      )r4   hasattrr(   rF   rC   )r>   Zuse_pollr?   countZpoll_funr   r   r   loop   s    
rK   c                   @   s2  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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 u rt | _n|| _d | _|r|d | || d| _z| | _W q ty } z2|j	d t
tfv rtd| _n| |  W Y d }~qd }~0 0 nd | _d S )NFTr   )r4   _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 urz|d| j  W n" ty~   |t| j Y n0 dd	|t
| f S )N.Z	listeningrR   z%s:%dz<%s at %#x> )	__class__r   r   r:   rS   r9   rR   	TypeErrorreprjoinid)rV   Zstatusr   r   r   __repr__   s    

zdispatcher.__repr__c                 C   s   |d u r| j }| || j< d S r   )rN   rO   )rV   r?   r   r   r   add_channel	  s    zdispatcher.add_channelc                 C   s,   | j }|d u r| j}||v r"||= d | _ d S r   )rO   rN   )rV   r?   rB   r   r   r   rT     s    zdispatcher.del_channelc                 C   s.   ||f| _ t||}|d | | d S )NF)Zfamily_and_typerU   rP   rQ   )rV   ZfamilytyperW   r   r   r   create_socket  s    

zdispatcher.create_socketc                 C   s   || _ | | _| | d S r   )rU   filenorO   ra   rV   rW   r?   r   r   r   rQ     s    
zdispatcher.set_socketc                 C   sB   z*| j t jt j| j t jt jdB  W n ty<   Y n0 d S )NrH   )rU   Z
setsockopt
SOL_SOCKETZSO_REUSEADDR
getsockoptr-   rV   r   r   r   set_reuse_addr#  s    
zdispatcher.set_reuse_addrc                 C   s   dS NTr   rh   r   r   r   r7   4  s    zdispatcher.readablec                 C   s   dS rj   r   rh   r   r   r   r8   7  s    zdispatcher.writablec                 C   s(   d| _ tjdkr|dkrd}| j|S )NTnt   )r:   r   namerU   listen)rV   Znumr   r   r   rn   >  s    zdispatcher.listenc                 C   s   || _ | j|S r   )rS   rU   bind)rV   rS   r   r   r   ro   D  s    zdispatcher.bindc                 C   sp   d| _ d| _| j|}|tttfv s8|tkrBtj	dkrB|| _
d S |dtfv r^|| _
|   nt|t| d S )NFTrk   r   )rR   
connectingrU   Z
connect_exr   r   r   r   r   rm   rS   r	   handle_connect_eventr-   r   )rV   Zaddressr   r   r   r   connectH  s    
zdispatcher.connectc              
   C   sz   z| j  \}}W nZ ty&   Y d S  tyl } z0|jd tttfv rVW Y d }~d S  W Y d }~nd }~0 0 ||fS d S r'   )rU   acceptr\   r-   r.   r   r   r   )rV   ZconnrS   whyr   r   r   rs   V  s    zdispatcher.acceptc              
   C   s~   z| j |}|W S  tyx } zN|jd tkr>W Y d }~dS |jd tv rb|   W Y d }~dS  W Y d }~n
d }~0 0 d S r'   )rU   sendr-   r.   r   r/   r,   )rV   dataresultrt   r   r   r   ru   d  s    zdispatcher.sendc              
   C   sx   z(| j |}|s |   W dS |W S W nJ tyr } z2|jd tv r\|   W Y d }~dS  W Y d }~n
d }~0 0 d S )N    r   )rU   recvr,   r-   r.   r/   )rV   Zbuffer_sizerv   rt   r   r   r   ry   q  s    
zdispatcher.recvc              
   C   sp   d| _ d| _d| _|   | jd urlz| j  W n8 tyj } z |jd tt	fvrV W Y d }~n
d }~0 0 d S )NFr   )
rR   r:   rp   rT   rU   closer-   r.   r   r
   )rV   rt   r   r   r   rz     s    
zdispatcher.closec                 C   s   t jdt|  d S )Nzlog: %s
)sysstderrr$   str)rV   messager   r   r   log  s    zdispatcher.loginfoc                 C   s   || j vrtd||f  d S )Nz%s: %s)ignore_log_typesprint)rV   r~   rb   r   r   r   log_info  s    
zdispatcher.log_infoc                 C   s:   | j r|   n&| js.| jr$|   |   n|   d S r   )r:   handle_acceptrR   rp   rq   handle_readrh   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)	rU   rg   rf   SO_ERRORr-   r   handle_connectrR   rp   rV   r   r   r   r   rq     s    zdispatcher.handle_connect_eventc                 C   s*   | j r
d S | js| jr|   |   d S r   )r:   rR   rp   rq   handle_writerh   r   r   r   r#     s    zdispatcher.handle_write_eventc                 C   s0   | j t jt j}|dkr$|   n|   d S r'   )rU   rg   rf   r   r,   handle_exptr   r   r   r   r%     s    
zdispatcher.handle_expt_eventc                 C   sX   t  \}}}}zt| }W n   dt|  }Y n0 | 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_tracebackr]   r_   r   r,   )rV   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 eventrM   r   rh   r   r   r   r     s    zdispatcher.handle_exptc                 C   s   |  dd d S )Nzunhandled read eventrM   r   rh   r   r   r   r     s    zdispatcher.handle_readc                 C   s   |  dd d S )Nzunhandled write eventrM   r   rh   r   r   r   r     s    zdispatcher.handle_writec                 C   s   |  dd d S )Nzunhandled connect eventrM   r   rh   r   r   r   r     s    zdispatcher.handle_connectc                 C   s   |   }|d ur| j|  d S r   )rs   handle_accepted)rV   Zpairr   r   r   r     s    zdispatcher.handle_acceptc                 C   s   |   | dd d S )Nzunhandled accepted eventrM   )rz   r   )rV   rW   rS   r   r   r   r     s    zdispatcher.handle_acceptedc                 C   s   |  dd |   d S )Nzunhandled close eventrM   )r   rz   rh   r   r   r   r,     s    zdispatcher.handle_close)NN)N)N)N)r   ),r   r   r   debugrR   r:   rp   closingrS   	frozensetr   rX   r`   ra   rT   rU   ZAF_INETZSOCK_STREAMrc   rQ   ri   r7   r8   rn   ro   rr   rs   ru   ry   rz   r   r   r   rq   r#   r%   r   r   r   r   r   r   r   r,   r   r   r   r   rL      sJ   

 

	

rL   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 )Nrx   )rL   rX   
out_bufferre   r   r   r   rX     s    zdispatcher_with_send.__init__c                 C   s.   d}t | | jd d }| j|d  | _d S )Nr   i   )rL   ru   r   )rV   Znum_sentr   r   r   initiate_send   s    z"dispatcher_with_send.initiate_sendc                 C   s   |    d S r   )r   rh   r   r   r   r     s    z!dispatcher_with_send.handle_writec                 C   s   | j  pt| jS r   )rR   lenr   rh   r   r   r   r8     s    zdispatcher_with_send.writablec                 C   s0   | j r| dt|  | j| | _|   d S )Nz
sending %s)r   r   r]   r   r   )rV   rv   r   r   r   ru     s    zdispatcher_with_send.send)NN)r   r   r   rX   r   r   r8   ru   r   r   r   r   r     s
   
r   c                  C   s   t  \} }}g }|std|rL||jjj|jjjt|j	f |j
}q~|d \}}}ddd |D }|||f| ||fS )Nztraceback does not existrZ   c                 S   s   g | ]}d | qS )z
[%s|%s|%s]r   ).0xr   r   r   
<listcomp>&  rx   z%compact_traceback.<locals>.<listcomp>)r{   exc_infoAssertionErrorr9   tb_framef_codeco_filenameco_namer}   	tb_linenotb_nextr^   )r   r   tbr   fileZfunctionliner   r   r   r   r     s    r   c                 C   s   | d u rt } t|  D ]n}z|  W q tyb } z"|jd tkrHn|sN W Y d }~qd }~0  tyt    Y q   |s Y q0 q|   d S r'   )	r4   r5   valuesrz   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 r   )r   duprB   rV   rB   r   r   r   rX   N  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)rB   warningswarnResourceWarningrz   rh   r   r   r   __del__Q  s
    
zfile_wrapper.__del__c                 G   s   t j| jg|R  S r   )r   r"   rB   rV   r.   r   r   r   ry   W  s    zfile_wrapper.recvc                 G   s   t j| jg|R  S r   )r   r$   rB   r   r   r   r   ru   Z  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.)rU   rf   r   NotImplementedError)rV   levelZoptnameZbuflenr   r   r   rg   ]  s    
zfile_wrapper.getsockoptc                 C   s(   | j dk rd S | j }d| _ t| d S )Nr   r   )rB   r   rz   r   r   r   r   rz   h  s
    
zfile_wrapper.closec                 C   s   | j S r   )rB   rh   r   r   r   rd   o  s    zfile_wrapper.fileno)N)r   r   r   rX   r   ry   ru   rg   r"   r$   rz   rd   r   r   r   r   r   I  s   
r   c                   @   s   e Zd ZdddZdd ZdS )file_dispatcherNc                 C   sN   t | d | d| _z| }W n ty2   Y n0 | | t|d d S )NTF)rL   rX   rR   rd   AttributeErrorset_filer   set_blocking)rV   rB   r?   r   r   r   rX   t  s    
zfile_dispatcher.__init__c                 C   s"   t || _| j | _|   d S r   )r   rU   rd   rO   ra   r   r   r   r   r     s    
zfile_dispatcher.set_file)N)r   r   r   rX   r   r   r   r   r   r   r  s   
r   )r3   N)r3   N)rG   FNN)NF).__doc__r(   rU   r{   r;   r   r   errnor   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r/   r4   r   r   	Exceptionr   KeyboardInterrupt
SystemExitr   r"   r$   r&   r2   rC   rF   Zpoll3rK   rL   r   r   r   rm   r   r   r   r   r   r   <module>   sD   <


'

  *
)