Ë
    òT•j�O  ã                   óŒ  — 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	 e d„ Z G d„ de«      ZeeefZd„ Zd„ Z d	„ Z!d
„ Z"dd„Z#dd„Z$e$Z%dd„Z& G d„ d«      Z' G d„ de'«      Z(d„ Z)dd„Z*ejV                  dk(  r G d„ d«      Z, G d„ de'«      Z-yy# e$ r i ZY Œxw xY w)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                 ó’   — 	 t        j                  | «      S # t        t        t        f$ r | t
        v rt
        |    cY S d| z  cY S w xY w)NzUnknown error %s)ÚosÚstrerrorÚ
ValueErrorÚOverflowErrorÚ	NameErrorr   )Úerrs    ú,/usr/lib/python3.12/test/support/asyncore.pyÚ	_strerrorr   J   sI   € ð'Ü�{‰{˜3ÓÐøÜœ¤yÐ1ò 'Ø”)ÑÜ˜S‘>Ò!Ø! 3Ñ&Ò&ð'ús   ‚ —%A¾AÁAc                   ó   — e Zd Zy)ÚExitNowN)Ú__name__Ú
__module__Ú__qualname__© ó    r   r   r   R   s   „ Ør   r   c                 óf   — 	 | j                  «        y # t        $ r ‚  | j                  «        Y y xY w©N)Úhandle_read_eventÚ_reraised_exceptionsÚhandle_error©Úobjs    r   Úreadr'   W   ó1   € ðØ×ÑÕøÜò ØðØ×ÑÖúó   ‚ “0c                 óf   — 	 | j                  «        y # t        $ r ‚  | j                  «        Y y xY wr!   )Úhandle_write_eventr#   r$   r%   s    r   Úwriter,   _   s1   € ðØ×ÑÕ øÜò ØðØ×ÑÖúr)   c                 óf   — 	 | j                  «        y # t        $ r ‚  | j                  «        Y y xY wr!   )Úhandle_expt_eventr#   r$   r%   s    r   Ú
_exceptionr/   g   r(   r)   c                 ó6  — 	 |t         j                  z  r| j                  «        |t         j                  z  r| j	                  «        |t         j
                  z  r| j                  «        |t         j                  t         j                  z  t         j                  z  z  r| j                  «        y y # t        $ rB}|j                  t        vr| j                  «        n| j                  «        Y d }~y Y d }~y d }~wt        $ r ‚  | j                  «        Y y xY wr!   )ÚselectÚPOLLINr"   ÚPOLLOUTr+   ÚPOLLPRIr.   ÚPOLLHUPÚPOLLERRÚPOLLNVALÚhandle_closeÚOSErrorÚerrnoÚ_DISCONNECTEDr$   r#   )r&   ÚflagsÚes      r   Ú	readwriter>   o   sÔ   € ðØ”6—=‘=Ò Ø×!Ñ!Ô#Ø”6—>‘>Ò!Ø×"Ñ"Ô$Ø”6—>‘>Ò!Ø×!Ñ!Ô#Ø”F—N‘N¤V§^¡^Ñ3´f·o±oÑEÒFØ×ÑÕð Gøäò Ø�7‰7œ-Ñ'Ø×ÑÕà×Ñ×Ñô ûô  ò ØðØ×ÑÖús   ‚B.B2 Â2	DÂ;3C8Ã8Dc                 óª  — |€t         }|�rHg }g }g }t        |j                  «       «      D ]m  \  }}|j                  «       }|j	                  «       }|r|j                  |«       |r|j                  s|j                  |«       |s|sŒ]|j                  |«       Œo g |cxk(  r|cxk(  r|k(  rn nt        j                  | «       y t        j                  |||| «      \  }}}|D ]!  }|j                  |«      }|€Œt        |«       Œ# |D ]!  }|j                  |«      }|€Œt        |«       Œ# |D ]!  }|j                  |«      }|€Œt        |«       Œ# y y r!   )Ú
socket_mapÚlistÚitemsÚreadableÚwritableÚappendÚ	acceptingÚtimeÚsleepr1   Úgetr'   r,   r/   )	ÚtimeoutÚmapÚrÚwr=   Úfdr&   Úis_rÚis_ws	            r   ÚpollrQ   ƒ   sI  € Ø
€{ÜˆÚ
Øˆ�B�˜B˜Ü˜CŸI™I›KÓ(ò 		‰GˆB�Ø—<‘<“>ˆDØ—<‘<“>ˆDÙØ—‘˜”á˜CŸMšMØ—‘˜”Ù’tØ—‘˜•ð		ð �Ô�aÔ˜1ÕÜ�J‰J�wÔØä—-‘-  1 a¨Ó1‰ˆˆ1ˆaàò 	ˆBØ—'‘'˜"“+ˆCØˆ{ØÜ��Ið		ð ò 	ˆBØ—'‘'˜"“+ˆCØˆ{ØÜ�#�Jð		ð ò 	ˆBØ—'‘'˜"“+ˆCØˆ{ØÜ�s�Oñ		ð= r   c                 ó  — |€t         }| �t        | dz  «      } t        j                  «       }|r×t	        |j                  «       «      D ]  \  }}d}|j                  «       r$|t        j                  t        j                  z  z  }|j                  «       r|j                  s|t        j                  z  }|sŒn|j                  ||«       Œ� |j                  | «      }|D ]%  \  }}|j                  |«      }|€Œt        ||«       Œ' y y )Niè  r   )r@   Úintr1   rQ   rA   rB   rC   r2   r4   rD   rF   r3   ÚregisterrI   r>   )rJ   rK   ÚpollsterrN   r&   r<   rL   s          r   Úpoll2rV   ª   sè   € à
€{ÜˆØÐä�g˜d‘lÓ#ˆÜ�{‰{‹}€HÙ
Ü˜CŸI™I›KÓ(ò 	-‰GˆB�ØˆEØ�|‰|Œ~ØœŸ™¬¯©Ñ7Ñ7�à�|‰|Œ~ c§m¢mØœŸ™Ñ'�ÚØ×!Ñ! " eÕ,ð	-ð �M‰M˜'Ó"ˆØò 	"‰IˆB�Ø—'‘'˜"“+ˆCØˆ{ØÜ�c˜5Õ!ñ		"ð r   c                 ó¶   — |€t         }|rt        t        d«      rt        }nt        }|€|r || |«       |rŒy y |r|dkD  r || |«       |dz
  }|r|dkD  rŒy y y y )NrQ   r   é   )r@   Úhasattrr1   rV   rQ   )rJ   Úuse_pollrK   ÚcountÚpoll_funs        r   Úloopr]   Æ   sh   € Ø
€{Üˆá”GœF FÔ+Ü‰äˆà€}ÙÙ�W˜cÔ"ô ñ �e˜a’iÙ�W˜cÔ"Ø˜A‘IˆEñ �e˜a”iˆc�iˆcr   c                   ó"  — e Zd ZdZdZdZdZdZdZ e	dh«      Z
d"d„Zd„ Zd#d„Zd#d„Zej                   ej"                  fd„Zd#d	„Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd$d„Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d „ Z*d!„ Z+y)%Ú
dispatcherFNÚwarningc                 ó`  — |€t         | _        n|| _        d | _        |rA|j                  d«       | j	                  ||«       d| _        	 |j                  «       | _        y d | _        y # t        $ r<}|j                  t        t        fv rd| _        n| j                  |«       ‚ Y d }~y d }~ww xY w)NFT)r@   Ú_mapÚ_filenoÚsetblockingÚ
set_socketÚ	connectedÚgetpeernameÚaddrr9   r:   r   r   Údel_channelÚsocket)ÚselfÚsockrK   r   s       r   Ú__init__zdispatcher.__init__â   s¦   € Øˆ;Ü"ˆD�IàˆDŒIàˆŒáð ×Ñ˜UÔ#Ø�O‰O˜D #Ô&Ø!ˆDŒNðØ ×,Ñ,Ó.�•	ð ˆD�Køô ò 
Ø—9‘9¤¬6Ð 2Ñ2ð &+�D•Nð
 ×$Ñ$ SÔ)Øô #ûð	
ús   Á
A( Á(	B-Á12B(Â(B-c                 óì  — | j                   j                  dz   | j                   j                  z   g}| j                  r| j                  r|j                  d«       n| j                  r|j                  d«       | j                  �	 |j                  d| j                  z  «       ddj                  |«      t        | «      fz  S # t        $ r' |j                  t        | j                  «      «       Y ŒNw xY w)Nú.Ú	listeningrf   z%s:%dz<%s at %#x>ú )Ú	__class__r   r   rF   rh   rE   rf   Ú	TypeErrorÚreprÚjoinÚid)rk   Ústatuss     r   Ú__repr__zdispatcher.__repr__  s¼   € Ø—.‘.×+Ñ+¨CÑ/°·±×0KÑ0KÑKÐLˆØ�>Š>˜dŸišiØ�M‰M˜+Õ&Ø�^Š^Ø�M‰M˜+Ô&Ø�9‰9Ð ð/Ø—‘˜g¨¯	©	Ñ1Ô2ð  §¡¨Ó 0´"°T³(Ð;Ñ;Ð;øô ò /Ø—‘œd 4§9¡9›oÖ.ð/ús   ÂC Ã-C3Ã2C3c                 ó>   — |€| j                   }| || j                  <   y r!   )rb   rc   )rk   rK   s     r   Úadd_channelzdispatcher.add_channel  s   € àˆ;Ø—)‘)ˆCØ ˆˆD�L‰LÒr   c                 óT   — | j                   }|€| j                  }||v r||= d | _         y r!   )rc   rb   )rk   rK   rN   s      r   ri   zdispatcher.del_channel  s.   € Ø�\‰\ˆØˆ;Ø—)‘)ˆCØ�‰9à�B�Øˆ�r   c                 ó†   — ||f| _         t        j                  ||«      }|j                  d«       | j                  |«       y ©NF)Úfamily_and_typerj   rd   re   )rk   ÚfamilyÚtyperl   s       r   Úcreate_socketzdispatcher.create_socket  s8   € Ø% t˜|ˆÔÜ�}‰}˜V TÓ*ˆØ×Ñ˜ÔØ�‰˜Õr   c                 ó^   — || _         |j                  «       | _        | j                  |«       y r!   )rj   Úfilenorc   rz   ©rk   rl   rK   s      r   re   zdispatcher.set_socket$  s$   € ØˆŒØ—{‘{“}ˆŒØ×Ñ˜Õr   c                 ó  — 	 | j                   j                  t         j                  t         j                  | j                   j	                  t         j                  t         j                  «      dz  «       y # t
        $ r Y y w xY w)NrX   )rj   Ú
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRÚ
getsockoptr9   ©rk   s    r   Úset_reuse_addrzdispatcher.set_reuse_addr)  sj   € ð	Ø�K‰K×"Ñ"Ü×!Ñ!¤6×#6Ñ#6Ø—‘×&Ñ&¤v×'8Ñ'8Ü'-×':Ñ':ó<Ø>?ñ@õøô
 ò 	Ùð	ús   ‚A2A5 Á5	BÂ Bc                  ó   — y©NTr   rŠ   s    r   rC   zdispatcher.readable:  ó   € Ør   c                  ó   — yr�   r   rŠ   s    r   rD   zdispatcher.writable=  rŽ   r   c                 óz   — d| _         t        j                  dk(  r|dkD  rd}| j                  j	                  |«      S )NTÚnté   )rF   r   Únamerj   Úlisten)rk   Únums     r   r”   zdispatcher.listenD  s4   € ØˆŒÜ�7‰7�dŠ?˜s QšwØˆCØ�{‰{×!Ñ! #Ó&Ð&r   c                 óF   — || _         | j                  j                  |«      S r!   )rh   rj   Úbind)rk   rh   s     r   r—   zdispatcher.bindJ  s   € ØˆŒ	Ø�{‰{×Ñ Ó%Ð%r   c                 ó,  — d| _         d| _        | j                  j                  |«      }|t        t
        t        fv s|t        k(  rt        j                  dk(  r|| _
        y |dt        fv r|| _
        | j                  «        y t        |t        |   «      ‚)NFTr‘   r   )rf   Ú
connectingrj   Ú
connect_exr   r   r   r   r   r“   rh   r
   Úhandle_connect_eventr9   r   )rk   Úaddressr   s      r   Úconnectzdispatcher.connectN  s~   € ØˆŒØˆŒØ�k‰k×$Ñ$ WÓ-ˆØ”;¤¬+Ð6Ñ6Ø”&Š=œRŸW™W¨š_ØˆDŒIØØ�1”g�,ÑØˆDŒIØ×%Ñ%Õ'ä˜#œy¨™~Ó.Ð.r   c                 óÂ   — 	 | j                   j                  «       \  }}||fS # t        $ r Y y t        $ r(}|j                  t
        t        t        fv rY d }~y ‚ d }~ww xY wr!   )rj   Úacceptrs   r9   r:   r   r   r   )rk   Úconnrh   Úwhys       r   rŸ   zdispatcher.accept\  s_   € ð
	ØŸ™×+Ñ+Ó-‰JˆD�$ð ˜�:Ðøô ò 	ÙÜò 	Ø�y‰yœ[¬,¼Ð?Ñ?Üàûð		ús   ‚# £	A®A¶AÁAÁAc                 óà   — 	 | j                   j                  |«      }|S # t        $ rE}|j                  t        k(  rY d }~y|j                  t
        v r| j                  «        Y d }~y‚ d }~ww xY w©Nr   )rj   Úsendr9   r:   r   r;   r8   )rk   ÚdataÚresultr¡   s       r   r¤   zdispatcher.sendj  s]   € ð
	Ø—[‘[×%Ñ% dÓ+ˆFØˆMøÜò 	Ø�y‰yœKÒ'ÜØ—‘œmÑ+Ø×!Ñ!Ô#Üàûð	ús    ‚ Ÿ	A-¨A(Á "A(Á'A(Á(A-c                 óÖ   — 	 | j                   j                  |«      }|s| j                  «        y|S # t        $ r-}|j                  t
        v r| j                  «        Y d }~y‚ d }~ww xY w©Nr   )rj   Úrecvr8   r9   r:   r;   )rk   Úbuffer_sizer¥   r¡   s       r   r©   zdispatcher.recvw  sb   € ð	Ø—;‘;×#Ñ# KÓ0ˆDÙð ×!Ñ!Ô#Øà�øÜò 	à�y‰yœMÑ)Ø×!Ñ!Ô#Üàûð	ús   ‚-2 °2 ²	A(»"A#Á"A#Á#A(c                 óü   — d| _         d| _        d| _        | j                  «        | j                  �	 | j                  j                  «        y y # t        $ r#}|j                  t        t        fvr‚ Y d }~y d }~ww xY wr}   )
rf   rF   r™   ri   rj   Úcloser9   r:   r   r   )rk   r¡   s     r   r¬   zdispatcher.close‰  sr   € ØˆŒØˆŒØˆŒØ×ÑÔØ�;‰;Ð"ðØ—‘×!Ñ!Õ#ð #øô ò Ø—9‘9¤X¬uÐ$5Ñ5Øô 6ûðús   ³A Á	A;ÁA6Á6A;c                 óZ   — t         j                  j                  dt        |«      z  «       y )Nzlog: %s
)ÚsysÚstderrr,   Ústr)rk   Úmessages     r   Úlogzdispatcher.log™  s   € Ü�
‰
×Ñ˜¤s¨7£|Ñ3Õ4r   c                 óB   — || j                   vrt        |›d|›�«       y y )Nz: )Úignore_log_typesÚprint)rk   r±   r€   s      r   Úlog_infozdispatcher.log_infoœ  s"   € Ø�t×,Ñ,Ñ,Üšd¡GÐ,Õ-ð -r   c                 óÐ   — | j                   r| j                  «        y | j                  s-| j                  r| j	                  «        | j                  «        y | j                  «        y r!   )rF   Úhandle_acceptrf   r™   r›   Úhandle_readrŠ   s    r   r"   zdispatcher.handle_read_event   sI   € Ø�>Š>ð ×ÑÕ Ø—’Ø�ŠØ×)Ñ)Ô+Ø×ÑÕà×ÑÕr   c                 óä   — | j                   j                  t         j                  t         j                  «      }|dk7  rt	        |t        |«      «      ‚| j                  «        d| _        d| _        y )Nr   TF)	rj   r‰   r‡   ÚSO_ERRORr9   r   Úhandle_connectrf   r™   ©rk   r   s     r   r›   zdispatcher.handle_connect_event¬  sT   € Ø�k‰k×$Ñ$¤V×%6Ñ%6¼¿¹ÓHˆØ�!Š8Ü˜#œy¨›~Ó.Ð.Ø×ÑÔØˆŒØˆ�r   c                 óŽ   — | j                   ry | j                  s| j                  r| j                  «        | j	                  «        y r!   )rF   rf   r™   r›   Úhandle_writerŠ   s    r   r+   zdispatcher.handle_write_event´  s4   € Ø�>Š>ð à�~Š~Ø�ŠØ×)Ñ)Ô+Ø×ÑÕr   c                 óÀ   — | j                   j                  t         j                  t         j                  «      }|dk7  r| j	                  «        y | j                  «        y r£   )rj   r‰   r‡   r»   r8   Úhandle_exptr½   s     r   r.   zdispatcher.handle_expt_event¿  sE   € ð �k‰k×$Ñ$¤V×%6Ñ%6¼¿¹ÓHˆØ�!Š8ð ×ÑÕà×ÑÕr   c                 óÂ   — t        «       \  }}}}	 t        | «      }| j                  d|›d|›d|›d|›d�	d«       | j	                  «        y #  dt        | «      z  }Y ŒBxY w)Nz)<__repr__(self) failed for object at %0x>z-uncaptured python exception, closing channel z (ú:rq   ú)Úerror)Úcompact_tracebackrt   rv   r¶   r8   )rk   ÚnilÚtÚvÚtbinfoÚ	self_reprs         r   r$   zdispatcher.handle_errorÎ  sj   € Ü-Ó/ÑˆˆQ��6ð	OÜ˜T›
ˆIð 	�ŠâÚÚÚð	ð ô	ð 	×ÑÕøð	OØCÄbÈÃhÑNŠIús   ‘A ÁAc                 ó(   — | j                  dd«       y )Nz!unhandled incoming priority eventr`   ©r¶   rŠ   s    r   rÁ   zdispatcher.handle_exptâ  s   € Ø�‰Ð9¸9ÕEr   c                 ó(   — | j                  dd«       y )Nzunhandled read eventr`   rÍ   rŠ   s    r   r¹   zdispatcher.handle_readå  s   € Ø�‰Ð,¨iÕ8r   c                 ó(   — | j                  dd«       y )Nzunhandled write eventr`   rÍ   rŠ   s    r   r¿   zdispatcher.handle_writeè  s   € Ø�‰Ð-¨yÕ9r   c                 ó(   — | j                  dd«       y )Nzunhandled connect eventr`   rÍ   rŠ   s    r   r¼   zdispatcher.handle_connectë  s   € Ø�‰Ð/°Õ;r   c                 óH   — | j                  «       }|� | j                  |Ž  y y r!   )rŸ   Úhandle_accepted)rk   Úpairs     r   r¸   zdispatcher.handle_acceptî  s(   € Ø�{‰{‹}ˆØÐØ ˆD× Ñ  $Ò'ð r   c                 óH   — |j                  «        | j                  dd«       y )Nzunhandled accepted eventr`   )r¬   r¶   )rk   rl   rh   s      r   rÒ   zdispatcher.handle_acceptedó  s   € Ø�
‰
ŒØ�‰Ð0°)Õ<r   c                 óH   — | j                  dd«       | j                  «        y )Nzunhandled close eventr`   )r¶   r¬   rŠ   s    r   r8   zdispatcher.handle_close÷  s   € Ø�‰Ð-¨yÔ9Ø�
‰
�r   ©NNr!   )Úinfo),r   r   r   Údebugrf   rF   r™   Úclosingrh   Ú	frozensetr´   rm   rx   rz   ri   rj   ÚAF_INETÚSOCK_STREAMr�   re   r‹   rC   rD   r”   r—   r�   rŸ   r¤   r©   r¬   r²   r¶   r"   r›   r+   r.   r$   rÁ   r¹   r¿   r¼   r¸   rÒ   r8   r   r   r   r_   r_   Ø   sÖ   „ à€EØ€IØ€IØ€JØ€GØ€DÙ  ) Ó-Ðóò@<ó!óð $*§>¡>¸×8JÑ8Jó óò
	ò"òò'ò&ò/òòòò$
ò 5ó.ò
ò ò	òòò(Fò9ò:ò<ò(ò
=ór   r_   c                   ó,   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zy)Údispatcher_with_sendNc                 ó@   — t         j                  | ||«       d| _        y r¨   )r_   rm   Ú
out_bufferr„   s      r   rm   zdispatcher_with_send.__init__  s   € Ü×Ñ˜D $¨Ô,Øˆ�r   c                 óv   — d}t         j                  | | j                  d d «      }| j                  |d  | _        y )Nr   i   )r_   r¤   rà   )rk   Únum_sents     r   Úinitiate_sendz"dispatcher_with_send.initiate_send  s4   € ØˆÜ—?‘? 4¨¯©¸¸%Ð)@ÓAˆØŸ/™/¨(¨)Ð4ˆ�r   c                 ó$   — | j                  «        y r!   )rã   rŠ   s    r   r¿   z!dispatcher_with_send.handle_write  s   € Ø×ÑÕr   c                 óJ   — | j                    xs t        | j                  «      S r!   )rf   Úlenrà   rŠ   s    r   rD   zdispatcher_with_send.writable  s   € Ø—N‘NÐ"Ò;¤s¨4¯?©?Ó';Ð;r   c                 óž   — | j                   r| j                  dt        |«      z  «       | j                  |z   | _        | j	                  «        y )Nz
sending %s)rØ   r¶   rt   rà   rã   )rk   r¥   s     r   r¤   zdispatcher_with_send.send  s:   € Ø�:Š:Ø�M‰M˜,¬¨d«Ñ3Ô4ØŸ/™/¨DÑ0ˆŒØ×ÑÕr   rÖ   )r   r   r   rm   rã   r¿   rD   r¤   r   r   r   rÞ   rÞ      s   „ óò5ò
ò<ór   rÞ   c                  óÎ  — t        j                  «       } | j                  }|st        d«      ‚g }|rr|j	                  |j
                  j                  j                  |j
                  j                  j                  t        |j                  «      f«       |j                  }|rŒr~|d   \  }}}dj                  |D �cg c]  }d|z  ‘Œ	 c}«      }|||ft        | «      | |fS c c}w )Nztraceback does not existéÿÿÿÿrq   z
[%s|%s|%s])r®   Ú	exceptionÚ__traceback__ÚAssertionErrorrE   Útb_frameÚf_codeÚco_filenameÚco_namer°   Ú	tb_linenoÚtb_nextru   r€   )ÚexcÚtbrÊ   ÚfileÚfunctionÚlineÚxr×   s           r   rÆ   rÆ     sÔ   € Ü
�-‰-‹/€CØ	×	Ñ	€BÙÜÐ7Ó8Ð8Ø€FÙ
Ø�‰Ø�K‰K×Ñ×*Ñ*Ø�K‰K×Ñ×&Ñ&Ü�—‘Óðô 	ð
 �Z‰Zˆò ð 	à! "™:Ñ€Dˆ(�DØ�8‰8¨vÖ6¨!�\ AÓ%Ò6Ó7€DØ�(˜DÐ!¤4¨£9¨c°4Ð7Ð7ùò 7s   Â=C"c                 ó  — | €t         } t        | j                  «       «      D ]  }	 |j                  «        Œ | j                  «        y # t        $ r!}|j
                  t        k(  rn|s‚ Y d }~ŒLd }~wt        $ r ‚  |s‚ Y Œ_xY wr!   )	r@   rA   Úvaluesr¬   r9   r:   r   r#   Úclear)rK   Ú
ignore_allrø   s      r   Ú	close_allrý   0  s}   € Ø
€{ÜˆÜ�#—*‘*“,Óò ˆð	Ø�G‰G�Iðð ‡I�I…Køô ò 	Ø�w‰wœ%ÒØÙØÿøÜ#ò 	Øð	ÙØñ ús   ¦A	Á		BÁA.Á.BÚposixc                   ó@   — e Zd Zd„ Zd„ Zd„ Zd„ Zd	d„ZeZeZ	d„ Z
d„ Zy)
Úfile_wrapperc                 ó8   — t        j                  |«      | _        y r!   )r   ÚduprN   ©rk   rN   s     r   rm   zfile_wrapper.__init__U  s   € Ü—f‘f˜R“jˆD�Gr   c                 ó€   — | j                   dk\  rt        j                  d| z  t        | ¬«       | j	                  «        y )Nr   zunclosed file %r)Úsource)rN   ÚwarningsÚwarnÚResourceWarningr¬   rŠ   s    r   Ú__del__zfile_wrapper.__del__X  s/   € Ø�w‰w˜!Š|Ü—‘Ð0°4Ñ7¼Ø%)õ+à�J‰J�Lr   c                 óB   — t        j                  | j                  g|¢­Ž S r!   )r   r'   rN   ©rk   Úargss     r   r©   zfile_wrapper.recv^  s   € Ü—7‘7˜4Ÿ7™7Ð* TÒ*Ð*r   c                 óB   — t        j                  | j                  g|¢­Ž S r!   )r   r,   rN   r  s     r   r¤   zfile_wrapper.senda  s   € Ü—8‘8˜DŸG™GÐ+ dÒ+Ð+r   Nc                 ój   — |t         j                  k(  r|t         j                  k(  r|syt        d«      ‚)Nr   z-Only asyncore specific behaviour implemented.)rj   r‡   r»   ÚNotImplementedError)rk   ÚlevelÚoptnameÚbuflens       r   r‰   zfile_wrapper.getsockoptd  s4   € Øœ×*Ñ*Ò*Øœ6Ÿ?™?Ò*ÙØÜ%ð '5ó 6ð 6r   c                 ót   — | j                   dk  ry | j                   }d| _         t        j                  |«       y )Nr   ré   )rN   r   r¬   r  s     r   r¬   zfile_wrapper.closeo  s+   € Ø�w‰w˜Š{ØØ—‘ˆBØˆDŒGÜ�H‰H�R�Lr   c                 ó   — | j                   S r!   )rN   rŠ   s    r   rƒ   zfile_wrapper.filenov  s   € Ø—7‘7ˆNr   r!   )r   r   r   rm   r	  r©   r¤   r‰   r'   r,   r¬   rƒ   r   r   r   r   r   P  s1   „ ò
	!ò	ò	+ò	,ó	6ð ˆØˆò	ó	r   r   c                   ó   — e Zd Zdd„Zd„ Zy)Úfile_dispatcherNc                 óÎ   — t         j                  | d |«       d| _        	 |j                  «       }| j                  |«       t        j                  |d«       y # t        $ r Y Œ3w xY w)NTF)r_   rm   rf   rƒ   ÚAttributeErrorÚset_filer   Úset_blocking)rk   rN   rK   s      r   rm   zfile_dispatcher.__init__{  s[   € Ü×Ñ  d¨CÔ0Ø!ˆDŒNðØ—Y‘Y“[�ð �M‰M˜"Ôä�O‰O˜B Õ&øô	 "ò Ùðús    A Á	A$Á#A$c                 ó‚   — t        |«      | _        | j                  j                  «       | _        | j	                  «        y r!   )r   rj   rƒ   rc   rz   r  s     r   r  zfile_dispatcher.set_file†  s.   € Ü& rÓ*ˆDŒKØŸ;™;×-Ñ-Ó/ˆDŒLØ×ÑÕr   r!   )r   r   r   rm   r  r   r   r   r  r  y  s   „ ó		'ó	r   r  )g        N)g      >@FNNr}   ).Ú__doc__r1   rj   r®   rG   r  r   r:   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rÚ   r;   r@   r   r   Ú	Exceptionr   ÚKeyboardInterruptÚ
SystemExitr#   r'   r,   r/   r>   rQ   rV   Úpoll3r]   r_   rÞ   rÆ   rý   r“   r   r  r   r   r   ú<module>r!     s
  ðñBó* Û Û 
Û Û ã 	÷÷ ÷ õ ñ
 ˜: x°¸LÈ%Ø ð"ó #€ðÙò'ô	ˆiô 	ð  Ð!2°JÐ?Ð òòòòó(%óN"ð4 	€ó÷$añ aôP	˜:ô ò68ó*ð> ‡7�7ˆgÒ÷'ñ 'ôR˜*õ ðU øðQ ò Ø‚Jðús   ÁB9 Â9CÃC