a
    (ñ»jÏ®  ã                   @  st  U d dl m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
 d dlmZmZ d dlmZmZmZ d dlZd dlZddlmZmZ ddlmZmZmZmZ dd	lmZmZmZmZm Z  dd
l!m"Z"m#Z# e�r€d dl$m%Z% d dl&m'Z' ddl(m)Z) e*eee+e,ee*e,e+f e*e,e+e+e+f e*e+e-f f f Z.de/d< e0e. Z1de/d< e*ee,e-df ee,e-e+df e+e+e+e+f Z2de/d< nde/d< e3Z1e3Z2G dd„ dƒZ4ej5dddœdd„ƒZ6ddœdd„Z7ddœdd„Z8dddœd d!„Z9ddœd"d#„Z:ddœd$d%„Z;ddœd&d'„Z<ddœd(d)„Z=ej>j?e@ed*ƒ d+d,�ddœd-d.„ƒZAddœd/d0„ZBeddœd1d2„ƒZCej>j?ejDd3kd4d,�ddœd5d6„ƒZEddœd7d8„ZFddœd9d:„ZGd;dd<œd=d>„ZHddœd?d@„ZIddœdAdB„ZJej> KdCdDejLfejMdEejNedF�g¡dGdHddIœdJdK„ƒZOddœdLdM„ZPdNdœdOdP„ZQejRdQdR�G dSdT„ dTƒƒZSej> KdUejLeSdVdDdWdXdY�fejMejNeSdZdEd[d\dY�edF�g¡dHdTdd]œd^d_„ƒZTddœd`da„ZUddœdbdc„ZVeddœddde„ƒZWeddœdfdg„ƒZXddœdhdi„ZYddœdjdk„ZZdddœdldm„Z[ddœdndo„Z\dddœdpdq„Z]ddœdrds„Z^ddœdtdu„Z_ej>j?e@edvƒ dwd,�ddœdxdy„ƒZ`ddœdzd{„Zaddœd|d}„ZbdS )~é    )ÚannotationsN)ÚPath)ÚAddressFamilyÚ
SocketKind)ÚTYPE_CHECKINGÚUnionÚcasté   )Ú_coreÚsocket)Ú
binds_ipv6Úcan_create_ipv6Úcreates_ipv6Úslow)Ú_NUMERIC_ONLYÚAddressFormatÚ
SocketTypeÚ_SocketTypeÚ	_try_sync)Úassert_checkpointsÚwait_all_tasks_blocked)ÚCallable)Ú	TypeAlias)ÚSocketStreamr   ÚGaiTupleÚGetAddrInfoResponseÚGetAddrInfoArgsÚobjectc                
   @  sv   e Zd ZdZdddœdd„Zddd	d
d
d
d
ddœdd„Zdddd	d
d
d
d
ddœdd„Zddd	d
d
d
d
ddœdd„ZdS )ÚMonkeypatchedGAI©Ú_orig_getaddrinfoÚ
_responsesÚrecordzaCallable[[str | bytes | None, str | bytes | int | None, int, int, int, int], GetAddrInfoResponse]ÚNone)Úorig_getaddrinfoÚreturnc                 C  s   || _ i | _g | _d S ©Nr   )Úselfr$   © r(   ú=E:\soccer\ml_env\Lib\site-packages\trio/_tests/test_socket.pyÚ__init__9   s    ýzMonkeypatchedGAI.__init__r   zstr | bytes | Nonezstr | bytes | int | NoneÚintr   ©ÚhostÚportÚfamilyÚtypeÚprotoÚflagsr%   c           
      C  s>   t  | j¡}|j||||||d�}| ¡  |j}	|jr:J ‚|	S ©N©r/   r0   r1   r2   )ÚinspectÚ	signaturer    ÚbindÚapply_defaultsÚargsÚkwargs)
r'   r-   r.   r/   r0   r1   r2   ÚsigÚboundZfrozenboundr(   r(   r)   Ú_frozenbindH   s    	
zMonkeypatchedGAI._frozenbindzGetAddrInfoResponse | str)Úresponser-   r.   r/   r0   r1   r2   r%   c              
   C  s    || j | j||||||d�< d S r3   )r!   r=   )r'   r>   r-   r.   r/   r0   r1   r2   r(   r(   r)   ÚsetX   s    ÷úÿzMonkeypatchedGAI.setc                 C  sd   |   ||||||¡}| j |¡ || jv r4| j| S |tj@ rR|  ||||||¡S td|› �ƒ‚d S )Nz%gai called with unexpected arguments )r=   r"   Úappendr!   Ústdlib_socketÚAI_NUMERICHOSTr    ÚRuntimeError)r'   r-   r.   r/   r0   r1   r2   r<   r(   r(   r)   Úgetaddrinfom   s    	


zMonkeypatchedGAI.getaddrinfoN)r   r   r   r   )r   r   r   r   )r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r*   r=   r?   rD   r(   r(   r(   r)   r   6   s"       ù    ø    ùr   zpytest.MonkeyPatch)Úmonkeypatchr%   c                 C  s   t tjƒ}|  td|j¡ |S )NrD   )r   rA   rD   Úsetattr)rI   Ú
controllerr(   r(   r)   Ú	monkeygai€   s    
rL   r#   ©r%   c                  Ã  s   t ƒ �J tƒ 4 I d H š W d   ƒI d H  qB1 I d H s80    Y  W d   ƒ n1 sV0    Y  t ƒ �x t t¡�N tƒ 4 I d H š t‚W d   ƒI d H  q²1 I d H s¨0    Y  W d   ƒ n1 sÆ0    Y  W d   ƒ n1 sä0    Y  tƒ 4 I d H š t‚W d   ƒI d H  �q01 I d H �s&0    Y  dddœdd„} t| ƒ4 I d H š t‚W d   ƒI d H  �q„1 I d H �sz0    Y  t ƒ �€ t t¡�T t| ƒ4 I d H š t‚W d   ƒI d H  �qÜ1 I d H �sÒ0    Y  W d   ƒ n1 �sò0    Y  W d   ƒ n1 �s0    Y  d S )NÚBaseExceptionÚbool)Úexcr%   c                 S  s
   t | tƒS r&   )Ú
isinstanceÚ
ValueError)rP   r(   r(   r)   Ú_is_ValueError”   s    z&test__try_sync.<locals>._is_ValueError)r   r   ÚpytestÚraisesÚKeyErrorÚBlockingIOErrorrR   )rS   r(   r(   r)   Útest__try_sync‡   s     Hj22rX   c                   C  sD   t jtjksJ ‚t jtjks J ‚t jtjks0J ‚t jtjks@J ‚d S r&   )ÚtsocketÚ
SOL_SOCKETrA   ÚTCP_NODELAYÚgaierrorÚntohsr(   r(   r(   r)   Útest_socket_has_some_reexports¥   s    r^   )rL   r%   c              	   Ã  sN  ddddœdd„}t ƒ �( tjddtjd�I d H }W d   ƒ n1 sF0    Y  ||tjtjtjd	d
fgƒ t ƒ �( tjddtjd�I d H }W d   ƒ n1 s 0    Y  ||tjtjtjd	dfgƒ | j	dddddddd� t ƒ �" t dd¡I d H }W d   ƒ n1 �s0    Y  |dk�s&J ‚| j
d dk�s:J ‚t ƒ �T t tj¡�&}tjdddd�I d H  W d   ƒ n1 �s|0    Y  W d   ƒ n1 �sœ0    Y  tjh}| tj¡ ttdƒ�rÒ| tj¡ |jj|v �säJ ‚t ƒ �N t t¡�" t dd¡I d H  W d   ƒ n1 �s 0    Y  W d   ƒ n1 �s@0    Y  d S )Nr   r#   )ÚgotÚexpectedr%   c                   s<   dddœdd„‰ dddœ‡ fd	d
„}|| ƒ||ƒks8J ‚d S )Nr   zatuple[AddressFamily, SocketKind, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]])Úgai_tupr%   c                 S  s   | \}}}}}|||fS r&   r(   )ra   r/   Útype_Z_protoZ
_canonnameÚsockaddrr(   r(   r)   Úinteresting_fields¸   s    z;test_getaddrinfo.<locals>.check.<locals>.interesting_fieldsr   zglist[tuple[AddressFamily, SocketKind, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]])Úgai_listr%   c                   s   ‡ fdd„| D ƒS )Nc                   s   g | ]}ˆ |ƒ‘qS r(   r(   )Ú.0ra   ©rd   r(   r)   Ú
<listcomp>Ì   ó    zEtest_getaddrinfo.<locals>.check.<locals>.filtered.<locals>.<listcomp>r(   )re   rg   r(   r)   ÚfilteredÃ   s    	z1test_getaddrinfo.<locals>.check.<locals>.filteredr(   )r_   r`   rj   r(   rg   r)   Úcheck²   s    ztest_getaddrinfo.<locals>.checkú	127.0.0.1Z12345©r0   Ú )rl   é90  ú::1)rp   ro   r   r   Úxó   hostr.   r   r4   r-   éÿÿÿÿ)rr   r.   r   r   r   r   ÚEAI_BADHINTSÚasdf)r   rY   rD   ÚSOCK_STREAMÚAF_INETÚIPPROTO_TCPÚ
SOCK_DGRAMÚAF_INET6ÚIPPROTO_UDPr?   r"   rT   rU   r\   ÚEAI_SOCKTYPEÚaddÚEAI_SERVICEÚhasattrrt   ÚvalueÚerrnorC   )rL   rk   ÚresÚexcinfoÚexpected_errnosr(   r(   r)   Útest_getaddrinfo±   sR    6ûÿþ6ûÿþ2Vr…   c               	   Ã  sž  t jt jB } tƒ �" t d| ¡I d H }W d   ƒ n1 s:0    Y  |dksPJ ‚tƒ �N t tj¡�" t dd¡I d H  W d   ƒ n1 sŒ0    Y  W d   ƒ n1 sª0    Y  tƒ �N t tj¡�" t dd¡I d H  W d   ƒ n1 sð0    Y  W d   ƒ n1 �s0    Y  t  dd¡\}}t dd¡I d H }|||fk�sNJ ‚t dtj¡I d H }|d|fk�stJ ‚t dtj¡I d H }||dfk�sšJ ‚d S )	N)rl   iÒ  )rl   Ú1234)z
google.coméP   r   )Ú	localhostr‡   ©rl   r‡   rl   Ú80)	rA   ÚNI_NUMERICHOSTÚNI_NUMERICSERVr   rY   ÚgetnameinforT   rU   r\   )Z
ni_numericr_   r-   Zservicer(   r(   r)   Útest_getnameinfo  s"    0NPrŽ   c               	   Ã  s\  t  ¡ \} }t| tjƒrJ ‚| �„ |�` t | ¡}t|tjƒsBJ ‚|  ¡ | ¡ ksVJ ‚| d¡I d H  | d¡dksxJ ‚W d   ƒ n1 sŒ0    Y  W d   ƒ n1 sª0    Y  t	 
t¡� t d¡ W d   ƒ n1 sÞ0    Y  G dd„ dt jƒ}|ƒ �F}t	 
t¡� t |¡ W d   ƒ n1 �s.0    Y  W d   ƒ n1 �sN0    Y  d S )Nó   xé   c                   @  s   e Zd ZdS )z)test_from_stdlib_socket.<locals>.MySocketN)rE   rF   rG   r(   r(   r(   r)   ÚMySocket<  s   r‘   )rA   Ú
socketpairrQ   rY   r   Úfrom_stdlib_socketÚfilenoÚsendÚrecvrT   rU   Ú	TypeErrorr   )ÚsaÚsbÚtar‘   Zmysockr(   r(   r)   Útest_from_stdlib_socket.  s    
N(r›   c               
   Ã  sÌ   t  ¡ \} }t |  ¡ | j| j| j¡}| �Ž |�j |�F | ¡ |  ¡ ksLJ ‚| d¡I d H  | 	d¡dksnJ ‚W d   ƒ n1 s‚0    Y  W d   ƒ n1 s 0    Y  W d   ƒ n1 s¾0    Y  d S )Nr�   é   )
rA   r’   rY   Úfromfdr”   r/   r0   r1   r•   r–   )r˜   r™   rš   r(   r(   r)   Útest_from_fdD  s    rž   c                  Ã  s¼   dddœdd„} t  ¡ \}}|�ˆ |�d t ¡ 4 I d H š.}| | |¡ | | |¡ W d   ƒI d H  q|1 I d H sr0    Y  W d   ƒ n1 s�0    Y  W d   ƒ n1 s®0    Y  d S )Nr   r#   ©Úsockr%   c                 Ó  s4   t dƒ |  d¡I d H  |  d¡I d H dks0J ‚d S )Nzsending helloó   hr�   )Úprintr•   r–   )r    r(   r(   r)   ÚchildN  s    z%test_socketpair_simple.<locals>.child)rY   r’   r
   Úopen_nurseryÚ
start_soon)r£   ÚaÚbÚnurseryr(   r(   r)   Útest_socketpair_simpleM  s    r©   Ú	fromsharezwindows only)Úreasonc               
   Ã  sâ   t rtjdkrd S t ¡ \} }| �¬ |�ˆ |  t ¡ ¡}t |¡}|�L |  	¡ | 	¡ ks\J ‚| 
d¡I d H  | d¡I d H dks„J ‚W d   ƒ n1 s˜0    Y  W d   ƒ n1 s¶0    Y  W d   ƒ n1 sÔ0    Y  d S )NÚwin32r�   r�   )r   ÚsysÚplatformrY   r’   ÚshareÚosÚgetpidrª   r”   r•   r–   )r¦   r§   ZsharedÚa2r(   r(   r)   Útest_fromshareZ  s    
r³   c                  Ã  sL   t  ¡ �0} t| t jƒsJ ‚| jt jks*J ‚W d   ƒ n1 s>0    Y  d S r&   )rY   r   rQ   r   r/   rw   ©Úsr(   r(   r)   Útest_socketi  s    
r¶   c                  Ã  sT   t  t jt j¡�0} t| t jƒs"J ‚| jt jks2J ‚W d   ƒ n1 sF0    Y  d S r&   )rY   r   rz   ry   rQ   r   r/   r´   r(   r(   r)   Útest_socket_v6o  s    r·   Úlinuxz
linux onlyc                  ƒ  sÆ   ddl m} m}m‰ m‰ tr$| |fn| f}‡ ‡fdd„|D ƒ}|D ]~}tj | ¡ d�}|j|jksfJ ‚|j	|j	ksvJ ‚| 
¡  t | ¡ | ˆ¡}|j|jks J ‚|j	|j	ks°J ‚| ¡  | ¡  qBd S )Nr   )rw   rz   ry   rv   c                   s&   g | ]}ˆ ˆfD ]}t  ||¡‘qqS r(   )rA   r   )rf   r/   rb   ©ry   rv   r(   r)   rh   |  s   þz'test_sniff_sockopts.<locals>.<listcomp>©r”   )r   rw   rz   ry   rv   r   rY   r”   r/   r0   Údetachr�   Úclose)rw   rz   ZfamiliesÚsocketsr   Ztsocket_socketZtsocket_from_fdr(   r¹   r)   Útest_sniff_sockoptsv  s    þr¾   c                  Ã  s  t  ¡ } | �œ}|| u sJ ‚t|  ¡ tƒs,J ‚|  ¡ r8J ‚|  d¡ |  ¡ sNJ ‚|  t jt j	d¡ |  
t jt j	¡rtJ ‚|  t jt j	d¡ |  
t jt j	¡sšJ ‚W d   ƒ n1 s®0    Y  |  ¡ dksÈJ ‚t| ƒ t  ¡ �:} |  ¡ }|  ¡ |ksòJ ‚|  ¡ dk�sJ ‚W d   ƒ n1 �s0    Y  t  ¡ } |  ¡ dk�s>J ‚|  ¡  |  ¡ dk�sXJ ‚dt| ƒv �sjJ ‚dt| ƒv �s|J ‚dt| ƒv �sŽJ ‚t t¡� | j W d   ƒ n1 �s¶0    Y  t ¡ }t  |¡} | j|jk�säJ ‚| j|jk�söJ ‚| j|jk�sJ ‚|  ¡  d S )NTFrs   r   r/   r–   Ú
setsockopt)rY   r   rQ   r”   r+   Úget_inheritableÚset_inheritabler¿   rx   r[   Ú
getsockoptÚreprr»   r¼   ÚdirrT   rU   ÚAttributeErrorru   rA   r“   r0   r/   r1   )r    Zcm_enter_valueÚfdZstdlib_sockr(   r(   r)   Útest_SocketType_basics˜  s@    
2
2&
rÇ   c                  Ã  s8   t  ¡ } | �}t| ƒ W d   ƒ n1 s*0    Y  d S r&   )rY   r   Úsetsockopt_tests)r    Ú_r(   r(   r)   Útest_SocketType_setsockoptË  s    rÊ   zSocketType | SocketStreamrŸ   c              
   C  sô   t tdƒr\z|  tjtjdd¡ W n8 tyZ } z |jdtjfv sFJ ‚W Y d}~n
d}~0 0 |  tjtj	d¡ t
jtdd��$ |  tjtj	dd¡ W d  ƒ n1 s¦0    Y  t
jtdd��" |  tjtj	d¡ W d  ƒ n1 sæ0    Y  dS )	z6Extract these out, to be reused for SocketStream also.ÚSO_BINDTODEVICENr   é*   Fz"invalid value for argument 'value'©Úmatché   )r   rY   r¿   rZ   rË   ÚOSErrorr�   ZEPERMrx   r[   rT   rU   r—   )r    Úer(   r(   r)   rÈ   Ñ  s    
ÿ
ö 2rÈ   c               
   Ã  sØ   t  ¡ \} }| �´ |�� |  ¡ }|�d t|t jƒs6J ‚| ¡ |  ¡ ksJJ ‚|  ¡  | d¡I d H  | d¡I d H dkszJ ‚W d   ƒ n1 sŽ0    Y  W d   ƒ n1 s¬0    Y  W d   ƒ n1 sÊ0    Y  d S ©Nr�   r�   )	rY   r’   ÚduprQ   r   r”   r¼   r•   r–   )r¦   r§   r²   r(   r(   r)   Útest_SocketType_dupô  s    rÔ   c               	   Ã  sì  t  ¡ \} }| �Ð |�¬ |  d¡I d H  | d¡I d H dks@J ‚| jrJJ ‚|jrTJ ‚|  t j¡ | jsjJ ‚|jrtJ ‚| d¡I d H dksŒJ ‚| d¡I d H  |  d¡I d H dks´J ‚W d   ƒ n1 sÈ0    Y  W d   ƒ n1 sæ0    Y  t  ¡ \} }| �Z |�4 | j�rJ ‚|  t j¡ | j�r,J ‚W d   ƒ n1 �sB0    Y  W d   ƒ n1 �sb0    Y  t  ¡ \} }| �Z |�4 | j�r�J ‚|  t j¡ | j�s¨J ‚W d   ƒ n1 �s¾0    Y  W d   ƒ n1 �sÞ0    Y  d S )Nr�   r�   ri   ó   y)	rY   r’   r•   r–   Zdid_shutdown_SHUT_WRÚshutdownÚSHUT_WRÚSHUT_RDÚ	SHUT_RDWR©r¦   r§   r(   r(   r)   Útest_SocketType_shutdown   s,    



TLrÛ   )ÚaddressÚsocket_typerl   rp   )ZmarksÚstrr   )rÜ   rÝ   r%   c                 Ã  sb  t  |¡}t  |¡}|��2 |��
 | | df¡I d H  | d¡ | ¡ d d… }t ¡ 4 I d H š6}| |j|¡ | 	¡ I d H \}}W d   ƒI d H  q®1 I d H s¤0    Y  |�Z || 
¡   krÐ| ¡ ksÖn J ‚| d¡I d H  | d¡I d H dksþJ ‚W d   ƒ n1 �s0    Y  W d   ƒ n1 �s40    Y  W d   ƒ n1 �sT0    Y  d S )Nr   é   r	   r�   r�   )rY   r   r7   ÚlistenÚgetsocknamer
   r¤   r¥   ÚconnectÚacceptÚgetpeernamer•   r–   )rÜ   rÝ   ÚlistenerÚclientÚaddrr¨   ÚserverÚclient_addrr(   r(   r)   Útest_SocketType_simple_server  s    


<"rê   c               	   Ã  s´   t  ¡ \} }| �� |�l |  ¡ r$J ‚| d¡I d H  t | ¡I d H  |  ¡ sPJ ‚|  d¡I d H dkshJ ‚|  ¡ rtJ ‚W d   ƒ n1 sˆ0    Y  W d   ƒ n1 s¦0    Y  d S rÒ   )rY   r’   Zis_readabler•   r
   Úwait_readabler–   rÚ   r(   r(   r)   Útest_SocketType_is_readable6  s    rì   rO   c                   C  s6   zt jddt jd� W n t jy,   Y dS 0 dS d S )Nú1.2.3.4r   ©r/   FT)rA   rD   rz   r\   r(   r(   r(   r)   Úgai_without_v4mapped_is_buggyD  s
    rï   F)Úslotsc                   @  s.   e Zd ZU ded< ded< ded< ded< dS )Ú	AddressesrÞ   Úbind_allrˆ   Ú	arbitraryÚ	broadcastN)rE   rF   rG   Ú__annotations__r(   r(   r(   r)   rñ   M  s   
rñ   )rÝ   Úaddrsz0.0.0.0rí   z255.255.255.255)rò   rˆ   ró   rô   z::ú1::2z::ffff:255.255.255.255)rÝ   rö   r%   c           
      ƒ  s  | t jk‰dddœ‡fdd„‰ddddœ‡fdd„}t j| d	���¸‰tˆtƒsRJ ‚d
D ]x}ˆj|dfdd�I d H }t|ttfƒr„J ‚|||jdfƒ ˆj|dfdd�I d H }t|ttfƒr¾J ‚|||j	dfƒ qVdD �]‰ dddœ‡ ‡fdd„}|||j
dfƒI d H |j
dfƒ ˆ�r||dƒI d H dƒ ||dƒI d H dƒ ||dƒI d H dƒ ||dƒI d H dƒ ||dƒI d H dƒ ||dƒI d H dƒ ||dƒI d H dƒ ||dƒI d H dƒ ||dƒI d H dƒ ||dƒI d H dƒ ˆ t jt jd¡ ||d ƒI d H d!ƒ ||d"ƒI d H |jd#fƒ ˆ�r°tƒ �s°ˆ t jt jd¡ t t j¡�}|d$ƒI d H  W d   ƒ n1 �sp0    Y  t jt jh}tt d%ƒ�rž| t j¡ |jj|v �s°J ‚zt jt jt jd&�}W n ttf�yÞ   Y n80 t|tƒ�sðJ ‚|jd'ˆ d�I d H d'k�sJ ‚| ¡  d(}	tjt|	d)�� |d*ƒI d H  W d   ƒ n1 �sN0    Y  tjt|	d)�� |d+ƒI d H  W d   ƒ n1 �sŒ0    Y  tjt|	d)��4 ˆ�r¼|d,ƒI d H  n|d-ƒI d H  W d   ƒ qÔ1 �sà0    Y  qÔW d   ƒ n1 �s0    Y  d S ).Nztuple[str | int, ...])rç   r%   c                   s   ˆ rt | ƒdk r| d7 } q| S )Né   )r   )Úlen)rç   )Úv6r(   r)   Úpadq  s    
z$test_SocketType_resolve.<locals>.padr#   )Úactualr`   r%   c                   s   ˆ |ƒˆ | ƒksJ ‚d S r&   r(   )rü   r`   )rû   r(   r)   Ú	assert_eqw  s    z*test_SocketType_resolve.<locals>.assert_eqrî   ©Nrn   r‡   T©ÚlocalF)FTz‡tuple[str, int] | tuple[str, int, int] | tuple[str, int, int, int] | tuple[str, str] | tuple[str, str, int] | tuple[str, str, int, int])r9   r%   c                 “  s,   ˆj | ˆ d�I d H }t|tƒs"J ‚td|ƒS )Nrÿ   ztuple[Union[str, int], ...])Ú_resolve_address_nocprQ   Útupler   )r9   r€   )r   r    r(   r)   r‚   ‘  s    
þz$test_SocketType_resolve.<locals>.resÚhttp)r÷   r‡   )r÷   r‡   r   r   )r÷   r‡   r   )r÷   r‡   r�   )r÷   r‡   r�   r   )r÷   r‡   r�   r	   )r÷   rŠ   )r÷   rŠ   r   )r÷   rŠ   r   r   )r÷   rŠ   r�   )r÷   rŠ   r�   r	   )rí   r  )z::ffff:1.2.3.4r‡   )z<broadcast>é{   r  )rí   r‡   ÚEAI_ADDRFAMILY)r/   r0   ru   úH^address should be a \(host, port(, \[flowinfo, \[scopeid\]\])*\) tuple$rÍ   rí   )rí   )rí   r‡   r   r   r   )rí   r‡   r   r   ) rY   rz   r   rQ   r   r  rÞ   Úbytesrò   rˆ   ró   r¿   ÚIPPROTO_IPV6ÚIPV6_V6ONLYrô   rï   rT   rU   r\   Ú
EAI_NONAMEÚ
EAI_NODATAr   r}   r  r€   r�   Z
AF_NETLINKry   rÅ   rÐ   r¼   rR   )
rÝ   rö   rý   Únullr_   r‚   rƒ   r„   Znetlink_sockrÜ   r(   )r   rû   r    rú   r)   Útest_SocketType_resolveV  s|    

 .þ
ÿÿ..þr  c               	   Ã  s  t  ¡ �–} |  d¡I d H  |  ¡ d dks.J ‚|  d¡ t  ¡ �@}| d|  ¡ d f¡I d H  | ¡ |  ¡ ksrJ ‚W d   ƒ n1 s†0    Y  W d   ƒ n1 s¤0    Y  t  ¡ �L} t t j	¡�  |  d¡I d H  W d   ƒ n1 sê0    Y  W d   ƒ n1 �s
0    Y  d S )N)rˆ   r   r   rl   é
   rˆ   r�   )z1.2:3rs   )
rY   r   r7   rá   rà   râ   rä   rT   rU   r\   )r    Zsock2r(   r(   r)   Ú test_SocketType_unresolved_namesë  s    


P
r  c                  ƒ  s^  t  ¡ \} }| ��6 |�� t | ¡‰ | d¡ | d¡ t ¡ �z}| ¡  t	ƒ �L t
 tj¡�  ˆ  d¡I d H  W d   ƒ n1 s†0    Y  W d   ƒ n1 s¤0    Y  W d   ƒ n1 sÂ0    Y  t	ƒ �( ˆ  d¡I d H dksìJ ‚W d   ƒ n1 �s0    Y  t	ƒ �L t
 t¡�  ˆ  d¡I d H  W d   ƒ n1 �sF0    Y  W d   ƒ n1 �sf0    Y  ddœ‡ fdd„}t ¡ 4 I d H š8}| |¡ tƒ I d H  | d	¡ W d   ƒI d H  �qâ1 I d H �sØ0    Y  ddœ‡ fd
d„}t ¡ 4 I d H š8}| |¡ tƒ I d H  |j ¡  W d   ƒI d H  �qT1 I d H �sJ0    Y  t |¡‰ddœ‡ ‡fdd„}ddœ‡ ‡fdd„}t ¡ 4 I d H šl}| |¡ | |¡ tƒ I d H  |  d¡ | d¡ tƒ I d H  |  d¡ | d¡ W d   ƒI d H  �q1 I d H �s0    Y  W d   ƒ n1 �s00    Y  W d   ƒ n1 �sP0    Y  d S )NFó   1r  Zhahar#   rM   c                   “  sB   t ƒ �( ˆ  d¡I d H dks J ‚W d   ƒ n1 s40    Y  d S )Nr  ó   2©r   r–   r(   ©rš   r(   r)   Údo_successful_blocking_recv  s    zGtest_SocketType_non_blocking_paths.<locals>.do_successful_blocking_recvr  c                	   “  sf   t ƒ �L t tj¡�  ˆ  d¡I d H  W d   ƒ n1 s:0    Y  W d   ƒ n1 sX0    Y  d S )Nr  )r   rT   rU   r
   Ú	Cancelledr–   r(   r  r(   r)   Údo_cancelled_blocking_recv  s    zFtest_SocketType_non_blocking_paths.<locals>.do_cancelled_blocking_recvc                   “  s€   t ƒ �( ˆ  d¡I d H dks J ‚W d   ƒ n1 s40    Y  t ƒ �( ˆ d¡I d H dks^J ‚W d   ƒ n1 sr0    Y  d S )Nr�   ó   aó   br  r(   ©rš   Útbr(   r)   Út11  s    6z.test_SocketType_non_blocking_paths.<locals>.t1c                   “  s€   t ƒ �( ˆ d¡I d H dks J ‚W d   ƒ n1 s40    Y  t ƒ �( ˆ  d¡I d H dks^J ‚W d   ƒ n1 sr0    Y  d S )Nr�   r  r  r  r(   r  r(   r)   Út27  s    6z.test_SocketType_non_blocking_paths.<locals>.t2r  r  )rA   r’   rY   r“   Úsetblockingr•   r
   ÚCancelScopeÚcancelr   rT   rU   r  r–   r—   r¤   r¥   r   Úcancel_scope)r¦   r§   Zcscoper  r¨   r  r  r  r(   r  r)   Ú"test_SocketType_non_blocking_pathsþ  sJ    



j8P
8
8





r!  c                  ƒ  s¸  t  ¡ �N‰tjtdd��  ˆ d¡I d H  W d   ƒ n1 s>0    Y  W d   ƒ n1 s\0    Y  t  ¡ �|‰t ¡ �T‰ ˆ  ¡  t tj	¡�  ˆ d¡I d H  W d   ƒ n1 s´0    Y  W d   ƒ n1 sÒ0    Y  W d   ƒ n1 sð0    Y  t ¡ ��4‰ t  ¡ ��‰t  ¡ �Þ} |  
d¡I d H  |  ¡  G ‡ ‡fdd„dtjƒ}tˆtƒ�s\J ‚ˆj ¡  |ƒ ˆ_tƒ �R t tj	¡�$ ˆ |  ¡ ¡I d H  W d   ƒ n1 �s®0    Y  W d   ƒ n1 �sÎ0    Y  ˆ ¡ dk�sêJ ‚W d   ƒ n1 �s 0    Y  W d   ƒ n1 �s 0    Y  W d   ƒ n1 �s@0    Y  t  ¡ �P‰tjtd	d��  ˆ d
¡I d H  W d   ƒ n1 �sŠ0    Y  W d   ƒ n1 �sª0    Y  d S )Nr  rÍ   rˆ   r‰   ©rl   r   c                      s"   e Zd Zdddœ‡ ‡fdd„ZdS )z3test_SocketType_connect_paths.<locals>.CancelSocketr   r#   )rÜ   r%   c                   sB   t ˆtƒsJ ‚ˆ  ¡  t |  ¡ | j| j¡ˆ_ˆj 	|¡ t
‚d S r&   )rQ   r   r  rA   r�   r»   r/   r0   Ú_sockrâ   rW   )r'   rÜ   ©r   r    r(   r)   râ   d  s    ýz;test_SocketType_connect_paths.<locals>.CancelSocket.connectN)rE   rF   rG   râ   r(   r$  r(   r)   ÚCancelSocketc  s   r%  rs   z^^\[\w+ \d+\] Error connecting to \('127\.0\.0\.\d', \d+\): (Connection refused|Unknown error)$)rl   r	   )rY   r   rT   rU   rR   râ   r
   r  r  r  r7   rà   rA   rQ   r   r#  r¼   r   rá   r”   rÐ   )rå   r%  r(   r$  r)   Útest_SocketType_connect_pathsI  s:    
þL

j
Tr
þr&  c               	   Ã  sz   d} t  ¡ �Z}tjtd| ›d�d��$ | | df¡I d H  W d   ƒ n1 sN0    Y  W d   ƒ n1 sl0    Y  d S )Nrl   z#^\[\w+ \d+\] Error connecting to \(z*, 2\): (Connection refused|Unknown error)$rÍ   r	   )rY   r   rT   rU   rÐ   râ   )rÜ   r    r(   r(   r)   Útest_address_in_socket_error“  s    

þr'  c                  ƒ  sð   t  ¡ �Ô‰ t ¡ �¬} ddddœ‡ fdd„}t| tƒs8J ‚|| _tƒ �L t 	t j
¡�  |  d¡I d H  W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  |  ¡ dks°J ‚W d   ƒ n1 sÄ0    Y  W d   ƒ n1 sâ0    Y  d S )	Nr   rO   r#   )rÜ   r   r%   c                “  s.   | dksJ ‚|rJ ‚ˆ   ¡  t ¡ I d H  d S rþ   )r  r
   Ú
checkpoint)rÜ   r   ©r   r(   r)   r  ¥  s    zVtest_resolve_address_exception_in_connect_closes_socket.<locals>._resolve_address_nocprn   rs   )r
   r  rY   r   rQ   r   r  r   rT   rU   r  râ   r”   )r    r  r(   r)  r)   Ú7test_resolve_address_exception_in_connect_closes_socket   s    


Lr*  c               	   Ã  s~  t  ¡ \} }| �ò |�Î |  d¡I d H dks0J ‚| dt j¡I d H dksLJ ‚| d¡I d H dksdJ ‚|  d¡I d H  tdƒ}| |¡I d H  |dks˜J ‚t| dƒrÖ|  dgg ¡I d H dks¾J ‚| d¡I d H dksÖJ ‚W d   ƒ n1 sê0    Y  W d   ƒ n1 �s
0    Y  t j	t j
d�} t j	t j
d�}| ��R |��* |  d	¡I d H  | d	¡I d H  | ¡ d
| ¡ d fg}|D ]V}|  d|¡I d H dk�sœJ ‚| d¡I d H \}}|dk�s¾J ‚||  ¡ k�s|J ‚�q|tt dƒ�r^|  dt j| ¡ ¡I d H  |  dt j| ¡ ¡I d H  |  d| ¡ ¡I d H  | d¡I d H \}}|dk�sLJ ‚||  ¡ k�s^J ‚|  d| ¡ ¡I d H dk�s~J ‚tdƒ}| |¡I d H \}}|dk�s¨J ‚|dk�s¶J ‚||  ¡ k�sÈJ ‚t|dƒ�rH|  d| ¡ ¡I d H dk�sôJ ‚| d¡I d H \}}}	}|dk�sJ ‚|g k�s(J ‚|	dk�s6J ‚||  ¡ k�sHJ ‚t|dƒ�rü|  d| ¡ ¡I d H dk�stJ ‚tdƒ}
tdƒ}| |
|g¡I d H }|\}}}	}|dk�s²J ‚|
dk�sÀJ ‚|dk�sÎJ ‚|g k�sÜJ ‚|	dk�sêJ ‚||  ¡ k�süJ ‚t| dƒ�rZ|D ]L}|  ddgg d|¡I d H dk�s4J ‚| d¡I d H d|  ¡ fk�sJ ‚�qW d   ƒ n1 �sp0    Y  W d   ƒ n1 �s�0    Y  t j	t j
d�} t j	t j
d�}| �® |�ˆ | d	¡I d H  |  | ¡ ¡I d H  |  d¡I d H  |  d¡I d H  | d¡I d H dk�s J ‚| d¡I d H dk�s:J ‚W d   ƒ n1 �sP0    Y  W d   ƒ n1 �sp0    Y  d S )Nr�   r�   r  s
   x         Úsendmsgs   xxxrœ   rm   r"  rˆ   ÚMSG_MOREs   yyys   zzzs	   xxxyyyzzzs
   xxx       Úrecvmsgr   Úrecvmsg_intos   xyzwrø   r	   s   xys   zw s   yzs   xyz)rY   r’   r•   r–   ÚMSG_PEEKÚ	bytearrayÚ	recv_intor   r+  r   ry   r7   rá   ÚsendtoÚrecvfromr,  Úrecvfrom_intor-  r.  râ   )r¦   r§   ÚbufÚtargetsÚtargetÚdatarç   ÚnbytesZancdataZ	msg_flagsZbuf1Úbuf2Úretr(   r(   r)   Útest_send_recv_variants·  sˆ    
V
   $fr<  c                 Ã  sÔ   |   ddd¡ | j dddtd� | j dddtd� |   dd	d¡ |   dd
d¡ t dd¡I d H dkshJ ‚t dd¡I d H dks‚J ‚t dd¡I d H dksœJ ‚t d
d¡I d H dks¶J ‚t dd¡I d H dksÐJ ‚d S )Nu
   ok faÃŸ.des   xn--fa-hia.der‡   zok ::1rp   )r2   s   ::1Úbadzfass.dezxn--fa-hia.deu   faÃŸ.de)r?   r   rY   rD   )rL   r(   r(   r)   Ú	test_idna  s    r>  c                   Ã  s4   t  d¡I d H dksJ ‚t  d¡I d H dks0J ‚d S )NZudpé   Ztcpé   )rY   Úgetprotobynamer(   r(   r(   r)   Útest_getprotobyname)  s    rB  c              	   Ã  s  G dd„ dƒ}|ƒ }t  |¡d u s&J ‚t jdddfdt jddfddt jdfdddt jffD ]2}t jddg|¢R Ž I d H dddg|¢R ksZJ ‚qZt  dd¡I d H }d	}||ks°J ‚t  d
d¡I d H dksÊJ ‚t  d ¡|u sÜJ ‚| jdddddddd� t  dd¡I d H dk�sJ ‚d S )Nc                   @  s8   e Zd Zddddddddœdd„Zdddd	œd
d„ZdS )z5test_custom_hostname_resolver.<locals>.CustomResolverrÞ   r+   z(tuple[str, str, str, int, int, int, int]r,   c                 Ó  s   d||||||fS )NÚ
custom_gair(   )r'   r-   r.   r/   r0   r1   r2   r(   r(   r)   rD   3  s    	zAtest_custom_hostname_resolver.<locals>.CustomResolver.getaddrinfoz+tuple[str, int] | tuple[str, int, int, int]z<tuple[str, tuple[str, int] | tuple[str, int, int, int], int])rc   r2   r%   c                 Ó  s
   d||fS )NÚ
custom_gnir(   )r'   rc   r2   r(   r(   r)   r�   >  s    zAtest_custom_hostname_resolver.<locals>.CustomResolver.getnameinfoN)rE   rF   rG   rD   r�   r(   r(   r(   r)   ÚCustomResolver2  s   rE  r   rˆ   ÚfoorC  s	   localhostu   fÃ¶Ã¶)rC  s
   xn--f-1gaarF  r   r   r   r   r¦   )rD  r¦   r   rq   rr   r.   r4   r-   )	rY   Zset_custom_hostname_resolverrw   rv   rx   ÚAI_CANONNAMErD   r�   r?   )rL   rE  ÚcrÚvalsr_   r`   r(   r(   r)   Útest_custom_hostname_resolver0  s,    üýürJ  c               	   Ã  s  G dd„ dƒ} | ƒ }t  |¡d u s&J ‚t  ¡ dt jt jdfksBJ ‚t  ddd¡dksXJ ‚t ¡  ¡ }t j|d	�}t|d
ƒs~J ‚| ¡  t  	¡ \}}|�P |�, t|d
ƒs¬J ‚t|d
ƒsºJ ‚W d   ƒ n1 sÎ0    Y  W d   ƒ n1 sì0    Y  t  d ¡|u �s
J ‚d S )Nc                   @  s    e Zd Zdddddœdd„ZdS )	z7test_custom_socket_factory.<locals>.CustomSocketFactoryr   r   r+   z*tuple[str, AddressFamily, SocketKind, int])r/   r0   r1   r%   c                 S  s   d|||fS )NÚhir(   )r'   r/   r0   r1   r(   r(   r)   r   o  s    z>test_custom_socket_factory.<locals>.CustomSocketFactory.socketN)rE   rF   rG   r   r(   r(   r(   r)   ÚCustomSocketFactoryn  s   rL  rK  r   r�   r	   rœ   )rK  r�   r	   rœ   rº   r7   )
rY   Zset_custom_socket_factoryr   rw   rv   rA   r»   r   r¼   r’   )rL  ZcsfrÆ   Úwrappedr¦   r§   r(   r(   r)   Útest_custom_socket_factorym  s    	JrN  c                   C  s6   t  t¡� t ¡  W d   ƒ n1 s(0    Y  d S r&   )rT   rU   r—   rY   r   r(   r(   r(   r)   Útest_SocketType_is_abstract�  s    rO  ÚAF_UNIXzno unix domain socketsc                  Ã  sÀ   dddœdd„} t  ¡ �V}| |› d�ƒI d H  | t|› d�ƒƒI d H  | t |› d�¡ƒI d H  W d   ƒ n1 st0    Y  z*t d	¡ ¡  d
¡}| d| ƒI d H  W n tyº   Y n0 d S )Nzstr | bytes | os.PathLike[str]r#   )Úpathr%   c              
   Ó  sè   t jt jd��Æ}| | ¡I d H  | d¡ t jt jd��~}| | ¡I d H  | ¡ I d H \}}|�8 | d¡I d H  | d¡I d H dksŠJ ‚W d   ƒ n1 sž0    Y  W d   ƒ n1 s¼0    Y  W d   ƒ n1 sÚ0    Y  d S )Nrî   r  r�   r�   )	rY   r   rP  r7   rà   râ   rã   r•   r–   )rQ  ÚlsockÚcsockÚssockrÉ   r(   r(   r)   Úcheck_AF_UNIX—  s    
z.test_unix_domain_socket.<locals>.check_AF_UNIXz/sockz/sock1z/sock2rß   Úasciis    trio-test-)	ÚtempfileÚTemporaryDirectoryr   r°   ÚfsencodeÚurandomÚhexÚencodeÚFileNotFoundError)rU  ZtmpdirÚcookier(   r(   r)   Útest_unix_domain_socket’  s    
8r_  c                  ƒ  s$  t  ¡ \} }| �þ |�Ú |  d¡ dd ‰z|  ˆ¡ q,W n tyL   Y n0 t | ¡‰ ddœ‡ ‡fdd„}ddœ‡ fdd	„}t ¡ 4 I d H š>}| 	|¡ | 	|¡ t
ƒ I d H  ˆ  ¡  W d   ƒI d H  qâ1 I d H sØ0    Y  W d   ƒ n1 sö0    Y  W d   ƒ n1 �s0    Y  d S )
NFr�   iŸ† r#   rM   c                   “  s@   t  tj¡�  ˆ  ˆ¡I d H  W d   ƒ n1 s20    Y  d S r&   )rT   rU   r
   ÚClosedResourceErrorr•   r(   ©r¦   r8  r(   r)   ÚsenderÂ  s    z)test_interrupted_by_close.<locals>.senderc                   “  s@   t  tj¡�  ˆ  d¡I d H  W d   ƒ n1 s20    Y  d S )Nr�   )rT   rU   r
   r`  r–   r(   )r¦   r(   r)   ÚreceiverÆ  s    z+test_interrupted_by_close.<locals>.receiver)rA   r’   r  r•   rW   rY   r“   r
   r¤   r¥   r   r¼   )Za_stdlibZb_stdlibrb  rc  r¨   r(   ra  r)   Útest_interrupted_by_close³  s     



rd  c                  Ã  s  d} g }t d| dƒD ]z}zt ¡ \}}W nX ty€ } z@|jtjtjfv sNJ ‚td|› d�ƒ W Y d }~ q�W Y d }~n
d }~0 0 |||g7 }qt 	¡ 4 I d H šF}|D ]}| 
tj|¡ q¦t ¡ I d H  |j ¡  W d   ƒI d H  qü1 I d H sò0    Y  |D ]}| ¡  �q d S )Niè  r   r	   zUnable to open more than z	 sockets.)ÚrangerA   r’   rÐ   r�   ZEMFILEZENFILEr¢   r
   r¤   r¥   rë   r   r   r  r¼   )Útotalr½   Zopenedr¦   r§   rP   r¨   r   r(   r(   r)   Útest_many_socketsÑ  s"    $4rg  )cÚ
__future__r   r�   r5   r°   r   rA   r­   rW  Úpathlibr   r   r   Útypingr   r   r   ÚattrsrT   rn   r
   rY   Z_core._tests.tutilr   r   r   r   Ú_socketr   r   r   r   r   Ztestingr   r   Úcollections.abcr   Ztyping_extensionsr   Z_highlevel_socketr   r  r+   rÞ   r  r   rõ   Úlistr   r   r   r   ZfixturerL   rX   r^   r…   rŽ   r›   rž   r©   ÚmarkZskipifr   r³   r¶   r·   r®   r¾   rÇ   rÊ   rÈ   rÔ   rÛ   Zparametrizerw   Úparamrz   rê   rì   rï   Zdefinerñ   r  r  r!  r&  r'  r*  r<  r>  rB  rJ  rN  rO  r_  rd  rg  r(   r(   r(   r)   Ú<module>   sâ   (üÿûÿ	JZ#	!3#þþ	
üþ	üøöþ}KI`=  