o
    US`c!                     @   sp  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Zd dlZ	ddl
mZmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZmZ G d	d
 d
Zejdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z ej!j"e#ed dddd Z$d d! Z%ed"d# Z&ej!j"e	j'd$k d%dd&d' Z(d(d) Z)d*d+ Z*d,d- Z+ej!,d.d/ej-fej.d0ej/ed1gd2d3 Z0d4d5 Z1d6d7 Z2ej3G d8d9 d9Z4ej!,d:ej-e4d;d/d<d=d>fej.ej/e4d?d0d@dAd>ed1gdBdC Z5dDdE Z6dFdG Z7dHdI Z8dJdK Z9dLdM Z:dNdO Z;dPdQ Z<dRdS Z=dTdU Z>dVdW Z?ej!j"e#edX dYddZd[ Z@d\d] ZAd^d_ ZBdS )`    N   )creates_ipv6
binds_ipv6)_core)_socket)socket)_NUMERIC_ONLY	_try_sync)assert_checkpointswait_all_tasks_blockedc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
MonkeypatchedGAIc                 C   s   || _ i | _g | _d S N)_orig_getaddrinfo
_responsesrecord)selfZorig_getaddrinfo r   A/usr/local/lib/python3.10/dist-packages/trio/tests/test_socket.py__init__   s   
zMonkeypatchedGAI.__init__c                 O   s8   t | j}|j|i |}|  |j}|jrJ |S r   )inspect	signaturer   bindapply_defaultsargskwargs)r   r   r   sigboundZfrozenboundr   r   r   _frozenbind   s   
zMonkeypatchedGAI._frozenbindc                 O   s   || j | j|i |< d S r   )r   r   )r   responser   r   r   r   r   set&   s   zMonkeypatchedGAI.setc                 O   s\   | j |i |}| j| || jv r| j| S |d tj@ r'| j|i |S td|)Nz'gai called with unexpected arguments {})	r   r   appendr   stdlib_socketAI_NUMERICHOSTr   RuntimeErrorformat)r   r   r   r   r   r   r   getaddrinfo)   s   

zMonkeypatchedGAI.getaddrinfoN)__name__
__module____qualname__r   r   r   r&   r   r   r   r   r      s
    r   c                 C   s   t tj}| td|j |S )Nr&   )r   r"   r&   setattr)Zmonkeypatch
controllerr   r   r   	monkeygai4   s   
r,   c                     s  t  % t 4 I d H  W d   I d H  n1 I d H sw   Y  W d    n1 s,w   Y  t  2 tt t 4 I d H  t1 I d H sKw   Y  W d    n1 sZw   Y  W d    n1 siw   Y  t 4 I d H  t1 I d H s~w   Y  dd } t| 4 I d H  t1 I d H sw   Y  t  < tt t| 4 I d H  t1 I d H sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nc                 S   s
   t | tS r   )
isinstance
ValueError)excr   r   r   _is_ValueErrorH   s   
z&test__try_sync.<locals>._is_ValueError)r
   r	   pytestraisesKeyErrorBlockingIOErrorr.   )r0   r   r   r   test__try_sync;   s>   ("r5   c                   C   sD   t jtjksJ t jtjksJ t jtjksJ t jtjks J d S r   )tsocket
SOL_SOCKETr"   TCP_NODELAYgaierrorntohsr   r   r   r   test_socket_has_some_reexportsY   s   r;   c              	      sJ  dd }t   tjddtjdI d H }W d    n1 sw   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 sLw   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 sw   Y  |d
ksJ | j
d dksJ t  ) ttj}tjddddI d H  W d    n1 sw   Y  W d    n1 sw   Y  tjh}|tj ttdr|tj |jj|v sJ t  0 tt tddI d H  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nc                    s,   dd   fdd}|| ||ksJ d S )Nc                 S   s   | \}}}}}|||fS r   r   )gai_tupfamilytypeproto	canonnamesockaddrr   r   r   interesting_fieldsl   s   
z;test_getaddrinfo.<locals>.check.<locals>.interesting_fieldsc                    s    fdd| D S )Nc                    s   g | ]} |qS r   r   ).0r<   rB   r   r   
<listcomp>r   s    zEtest_getaddrinfo.<locals>.check.<locals>.filtered.<locals>.<listcomp>r   )Zgai_listrD   r   r   filteredq   s   z1test_getaddrinfo.<locals>.check.<locals>.filteredr   )gotexpectedrF   r   rD   r   checkf   s   ztest_getaddrinfo.<locals>.check	127.0.0.1Z12345r>    )rJ   90  ::1)rN   rM   r   r   x   hostportr   r=   r>   r?   flagshostr    )rP   rQ   r   r   r   r   EAI_BADHINTSasdf)r
   r6   r&   SOCK_STREAMAF_INETIPPROTO_TCP
SOCK_DGRAMAF_INET6IPPROTO_UDPr   r   r1   r2   r9   EAI_SOCKTYPEaddEAI_SERVICEhasattrrU   valueerrnor$   )r,   rI   resexcinfoexpected_errnosr   r   r   test_getaddrinfoe   sh   
 $rf   c               	      s  t jt jB } t  td| I d H }W d    n1 sw   Y  |dks)J t ' ttj tddI d H  W d    n1 sGw   Y  W d    n1 sVw   Y  t ' ttj tddI d H  W d    n1 syw   Y  W d    n1 sw   Y  t dd\}}tddI d H }|||fksJ tdtjI d H }|d|fksJ tdtjI d H }||dfksJ d S )	N)rJ   i  )rJ   1234)z
google.comP   r   )	localhostrh   rJ   rh   rJ   80)	r"   NI_NUMERICHOSTNI_NUMERICSERVr
   r6   getnameinfor1   r2   r9   )Z
ni_numericrG   rT   servicer   r   r   test_getnameinfo   s2   rp   c               	      sl  t  \} }t| tjrJ | B |0 t| }t|tjs"J |  | ks,J |dI d H  |ddks=J W d    n1 sGw   Y  W d    n1 sVw   Y  t	
t td W d    n1 spw   Y  G dd dt j}| +}t	
t t| W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N   x   c                   @   s   e Zd ZdS )z)test_from_stdlib_socket.<locals>.MySocketN)r'   r(   r)   r   r   r   r   MySocket   s    rs   )r"   
socketpairr-   r6   
SocketTypefrom_stdlib_socketfilenosendrecvr1   r2   	TypeErrorr   )sasbtars   Zmysockr   r   r   test_from_stdlib_socket   s.   
 "r~   c               
      s   t  \} }t|  | j| j| j}| P |5 |# | |  ks'J |dI d H  |	ddks8J W d    n1 sBw   Y  W d    n1 sQw   Y  W d    d S W d    d S 1 siw   Y  d S )Nrq      )
r"   rt   r6   fromfdrw   r=   r>   r?   rx   ry   )r{   r|   r}   r   r   r   test_from_fd   s   P r   c                     s   dd } t  \}}|M |2 t 4 I d H }|| | || | W d   I d H  n1 I d H s6w   Y  W d    n1 sEw   Y  W d    d S W d    d S 1 s]w   Y  d S )Nc                    s6   t d | dI d H  | dI d H dksJ d S )Nzsending hello   hrr   )printrx   ry   )sockr   r   r   child   s   z%test_socketpair_simple.<locals>.child)r6   rt   r   open_nursery
start_soon)r   abnurseryr   r   r   test_socketpair_simple   s   (Pr   	fromsharezwindows only)reasonc               
      s   t  \} }| _ |D | t }t |}|& |  | ks&J |dI d H  |dI d H dks:J W d    n1 sDw   Y  W d    n1 sSw   Y  W d    d S W d    d S 1 skw   Y  d S Nrq   rr   )	r6   rt   shareosgetpidr   rw   rx   ry   )r   r   Zshareda2r   r   r   test_fromshare   s   
Pr   c                     sP   t  } t| t jsJ | jt jksJ W d    d S 1 s!w   Y  d S r   )r6   r   r-   ru   r=   rX   sr   r   r   test_socket  s
   
"r   c                     sX   t t jt j} t| t jsJ | jt jksJ W d    d S 1 s%w   Y  d S r   )r6   r   r[   rZ   r-   ru   r=   r   r   r   r   test_socket_v6  s
   "r   linuxz
linux onlyc            
         s   ddl m} m}m}m} g }| |fD ]}||fD ]}|t || qq|D ]?}tj | d}|j	|j	ks:J |j
|j
ksBJ |  t| | |}	|	j	|j	ksWJ |	j
|j
ks_J |	  |  q(d S )Nr   )rX   r[   rZ   rW   rw   )r   rX   r[   rZ   rW   r!   r"   r6   rw   r=   r>   detachr   close)
rX   r[   rZ   rW   socketsr=   r>   r   Ztsocket_socketZtsocket_from_fdr   r   r   test_sniff_sockopts  s$   
r   c                     s  t  } | N}|| u sJ t|  tsJ |  rJ | d |  s(J | t jt j	d | 
t jt j	r;J | t jt j	d | 
t jt j	sNJ W d    n1 sXw   Y  |  dkseJ t|  t  } |  }|  |kszJ |  dksJ W d    n1 sw   Y  t  } |  dksJ |   |  dksJ dt| v sJ dt| v sJ dt| v sJ tt | j W d    n1 sw   Y  t }t |} | jt|jksJ | j|jksJ | j|jksJ |   d S )NTFr    r   r=   ry   
setsockopt)r6   r   r-   rw   intget_inheritableset_inheritabler   rY   r8   
getsockoptreprr   r   dirr1   r2   AttributeErrorrV   r"   rv   r>   _tsocketZreal_socket_typer=   r?   )r   Zcm_enter_valuefdZstdlib_sockr   r   r   test_SocketType_basics:  sH   


r   c               
      s   t  \} }| c |H |  }|2 t|t jsJ | |  ks&J |   |dI d H  |dI d H dks>J W d    n1 sHw   Y  W d    n1 sWw   Y  W d    d S W d    d S 1 sow   Y  d S r   )	r6   rt   dupr-   ru   rw   r   rx   ry   )r   r   r   r   r   r   test_SocketType_dupm  s   Pr   c               	      s  t  \} }| h |V | dI d H  |dI d H dks!J | jr&J |jr+J | t j | js6J |jr;J |dI d H dksGJ |dI d H  | dI d H dks[J W d    n1 sew   Y  W d    n1 stw   Y  t  \} }| * | | jrJ | t j | jrJ W d    n1 sw   Y  W d    n1 sw   Y  t  \} }| 3 | | jrJ | t j | jsJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nrq   rr          y)	r6   rt   rx   ry   Zdid_shutdown_SHUT_WRshutdownSHUT_WRSHUT_RD	SHUT_RDWRr   r   r   r   r   test_SocketType_shutdowny  s<   



 
 
Pr   zaddress, socket_typerJ   rN   )Zmarksc                    sn  t |}t |}| | || dfI d H  |d | d d }t 4 I d H }||j| |	 I d H \}}W d   I d H  n1 I d H sQw   Y  |. ||
   krh| kskJ  J |dI d H  |dI d H dksJ W d    n1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr      r   rq   rr   )r6   r   r   listengetsocknamer   r   r   connectacceptgetpeernamerx   ry   )addresssocket_typelistenerclientaddrr   serverclient_addrr   r   r   test_SocketType_simple_server  s$   
	

($Pr   c               	      s   t  \} }| Q |6 |  rJ |dI d H  t| I d H  |  s)J | dI d H dks5J |  r;J W d    n1 sEw   Y  W d    d S W d    d S 1 s]w   Y  d S r   )r6   rt   Zis_readablerx   r   wait_readablery   r   r   r   r   test_SocketType_is_readable  s   Pr   c                   C   s0   zt jddt jd W dS  t jy   Y dS w )N1.2.3.4r   r=   FT)r"   r&   r[   r9   r   r   r   r   gai_without_v4mapped_is_buggy  s   r   c                   @   s,   e Zd Ze Ze Ze Ze ZdS )	AddressesN)	r'   r(   r)   attribbind_allri   	arbitrary	broadcastr   r   r   r   r     s
    r   zsocket_type, addrsz0.0.0.0r   z255.255.255.255)r   ri   r   r   z::1::2z::ffff:255.255.255.255c           	         s  | t jkfddfdd}t j| ddD ]*}j|dfdd	I d H }|||jdf j|dfd
d	I d H }|||jdf qdD ]s  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 r0t s0t jt j	d tt j}|dI d H  W d    n	1 sw   Y  t jh}tt dr'|t j |jj|v s0J zt jt jt jd }W n ttfyG   Y nw |jd! d	I d H d!ksWJ |  tt |d"I d H  W d    n	1 ssw   Y  tt |d#I d H  W d    n	1 sw   Y  tt r|d$I d H  n|d%I d H  W d    n	1 sw   Y  qIW d    d S 1 sw   Y  d S )&Nc                    s(    rt | dk r| d7 } t | dk s| S )N   )r   )len)r   )v6r   r   pad  s
   z$test_SocketType_resolve.<locals>.padc                    s    | | ks
J d S r   r   )actualrH   )r   r   r   	assert_eq  s   z*test_SocketType_resolve.<locals>.assert_eqr   )NrL   rh   T)localF)FTc                     s   j | d iI d H S )Nr   )_resolve_address_nocp)r   )r   r   r   r   rc     s   z$test_SocketType_resolve.<locals>.reshttp)r   rh   )r   rh   r   r   )r   rh   r   )r   rh   rr   )r   rh   rr   r   )r   rh   rr   r   )r   rk   )r   rk   r   )r   rk   r   r   )r   rk   rr   )r   rk   rr   r   )r   r   )z::ffff:1.2.3.4rh   )z<broadcast>{   r   )r   rh   EAI_ADDRFAMILY)r=   r>   rV   r   )r   )r   rh   r   r   r   )r   rh   r   r   )r6   r[   r   r   r   ri   r   r   IPPROTO_IPV6IPV6_V6ONLYr   r   r1   r2   r9   
EAI_NONAMEr`   r^   r   ra   rb   
AF_NETLINKrZ   r   OSErrorr   r.   )	r   addrsr   nullrG   rc   rd   re   Znetlink_sockr   )r   r   r   r   r   test_SocketType_resolve  s~   

 
$r   c               	      s*  t  K} | dI d H  |  d dksJ | d t   }|d|  d fI d H  | |  ks:J W d    n1 sDw   Y  W d    n1 sSw   Y  t  /} tt j	 | dI d H  W d    n1 svw   Y  W d    d S W d    d S 1 sw   Y  d S )N)ri   r   r   rJ   
   ri   rr   )z1.2:3r    )
r6   r   r   r   r   r   r   r1   r2   r9   )r   Zsock2r   r   r    test_SocketType_unresolved_namesC  s$   




"r   c                     sH  t  \} }|  |r t|  |d |d t =}|  t	 & t
tj  dI d H  W d    n1 sDw   Y  W d    n1 sSw   Y  W d    n1 sbw   Y  t	   dI d H dk W d    n1 sw   Y  t	 % t
t  dI d H  W d    n1 sw   Y  W d    n1 sw   Y   fdd}t 4 I d H }|| t I d H  |d W d   I d H  n1 I d H sw   Y   fdd	}t 4 I d H }|| t I d H  |j  W d   I d H  n1 I d H sw   Y  t| fd
d} fdd}t 4 I d H 5}|| || t I d H  | d |d t I d H  | d |d W d   I d H  n1 I d H stw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )NF   1r   Zhahac                      sF   t    dI d H dksJ W d    d S 1 sw   Y  d S )Nr      2r
   ry   r   r}   r   r   do_successful_blocking_recvm  s   "zGtest_SocketType_non_blocking_paths.<locals>.do_successful_blocking_recvr   c                	      sz   t  / ttj  dI d H  W d    n1 sw   Y  W d    d S W d    d S 1 s6w   Y  d S )Nr   )r
   r1   r2   r   	Cancelledry   r   r   r   r   do_cancelled_blocking_recvw  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 sw   Y  t   dI d H dks0J W d    d S 1 s;w   Y  d S )Nrr      a   br   r   r}   tbr   r   t1     "z.test_SocketType_non_blocking_paths.<locals>.t1c                      s   t   dI d H dksJ W d    n1 sw   Y  t    dI d H dks0J W d    d S 1 s;w   Y  d S )Nrr   r   r   r   r   r   r   r   t2  r   z.test_SocketType_non_blocking_paths.<locals>.t2r   r   )r"   rt   r6   rv   setblockingrx   r   CancelScopecancelr
   r1   r2   r   ry   rz   r   r   r   cancel_scope)r   r   Zcscoper   r   r   r   r   r   r   r   "test_SocketType_non_blocking_pathsV  sh   




(
*





*Tr   c                     s  t  %tt dI d H  W d    n1 sw   Y  W d    n1 s-w   Y  t  >t *    ttj	 dI d H  W d    n1 sYw   Y  W d    n1 shw   Y  W d    n1 sww   Y  t  t  xt  d} | 
dI d H  |   G  fdddtj}j  | _t ( ttj	 |  I d H  W d    n1 sw   Y  W d    n1 sw   Y   dksJ W d    n1 sw   Y  W d    n	1 sw   Y  W d    n	1 sw   Y  t  /tt dI d H  W d    n1 s4w   Y  W d    d S W d    d S 1 sMw   Y  d S )Nri   rj   rJ   r   c                       s   e Zd Z fddZdS )z3test_SocketType_connect_paths.<locals>.CancelSocketc                    s6       t|  | j| j_jj|i | tr   )	r   r"   r   r   r=   r>   _sockr   r4   r   r   r   r   r   r   r   r     s   z;test_SocketType_connect_paths.<locals>.CancelSocket.connectN)r'   r(   r)   r   r   r   r   r   CancelSocket  s    r   r    )rJ   r   )r6   r   r1   r2   r.   r   r   r   r   r   r   r   r"   r   r   r
   r   rw   r   )r   r   r   r   r   test_SocketType_connect_paths  sV   





 
 $r   c                     s   t  g t J}  fdd}|| _t & tt j | 	dI d H  W d    n1 s1w   Y  W d    n1 s@w   Y  | 
 dksMJ W d    n1 sWw   Y  W d    d S W d    d S 1 sow   Y  d S )Nc                    s       t I d H  d S r   )r   r   
checkpointr   r   r   r   r     s   zVtest_resolve_address_exception_in_connect_closes_socket.<locals>._resolve_address_nocprL   r    )r   r   r6   r   r   r
   r1   r2   r   r   rw   )r   r   r   r   r   7test_resolve_address_exception_in_connect_closes_socket  s    

"r   c               	      s  t  \} }| y |g | dI d H dksJ |dt jI d H dks'J |dI d H dks3J | dI d H  td}||I d H  |dksMJ t| drl| dgg I d H dks`J |dI d H dkslJ W d    n1 svw   Y  W d    n1 sw   Y  t j	t j
d} t j	t j
d}|  | | d	I d H  |d	I d H  | d
| d fg}|D ]'}| d|I d H dksJ |dI d H \}}|dksJ ||  ksJ qt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s"J ||  ks+J | d| I d H dks;J td}||I d H \}}|dksPJ |dksWJ ||  ks`J t|dr| d| I d H dksvJ |dI d H \}}}	}|dksJ |g ksJ |	dksJ ||  ksJ t|dr| d| I d H dksJ td}
td}||
|gI d H }|\}}}	}|dksJ |
dksJ |dksJ |g ksJ |	dksJ ||  ksJ t| dr)|D ]&}| ddgg d|I d H dksJ |dI d H d|  fks'J qW d    n	1 s4w   Y  W d    n	1 sDw   Y  t j	t j
d} t j	t j
d}| ` |D |d	I d H  | | I d H  | dI d H  | dI d H  |dI d H dksJ |dI d H dksJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nrq   rr   r   s
   x         sendmsgs   xxxr   rK   r   ri   MSG_MOREs   yyys   zzzs	   xxxyyyzzzs
   xxx       recvmsgr   recvmsg_intos   xyzwr   r   s   xys   zw s   yzs   xyz)r6   rt   rx   ry   MSG_PEEK	bytearray	recv_intor`   r   r   rZ   r   r   sendtorecvfromr   recvfrom_intor   r  r   )r   r   buftargetstargetdatar   nbytesancdataZ	msg_flagsZbuf1Zbuf2retr   r   r   test_send_recv_variants  s   
 
   $& ?Tr  c                    s   |  ddd | j dddtd | j dddtd |  dd	d |  dd
d dtddI d H ks5J dtddI d H ksBJ dtddI d H ksOJ dtd
dI d H ks\J dtddI d H ksiJ d S )Nu
   ok faß.des   xn--fa-hia.derh   zok ::1rN   )rS   s   ::1badzfass.dezxn--fa-hia.deu   faß.de)r   r   r6   r&   )r,   r   r   r   	test_idnaF  s   r  c                      s6   t dI d H dksJ t dI d H dksJ d S )NZudp   Ztcp   )r6   getprotobynamer   r   r   r   test_getprotobynameX  s   r  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 ]}t jddg|R  I d H dddg|R ksGJ q.t ddI d H }d	}||ksYJ t d
dI d H dksfJ t d |u soJ | jdddddddd t ddI d H dksJ d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z5test_custom_hostname_resolver.<locals>.CustomResolverc                    s   d||||||fS )N
custom_gair   )r   rT   rQ   r=   r>   r?   rS   r   r   r   r&   a  s   zAtest_custom_hostname_resolver.<locals>.CustomResolver.getaddrinfoc                    s   d||fS )N
custom_gnir   )r   rA   rS   r   r   r   rn   d  s   
zAtest_custom_hostname_resolver.<locals>.CustomResolver.getnameinfoN)r'   r(   r)   r&   rn   r   r   r   r   CustomResolver`  s    r  r   ri   foor  s	   localhostu   föö)r  s
   xn--f-1gaar  r   r   r   r   r   )r  r   r   rO   rP   rQ   rR   rT   )	r6   Zset_custom_hostname_resolverrX   rW   rY   AI_CANONNAMEr&   rn   r   )r,   r  crvalsrG   rH   r   r   r   test_custom_hostname_resolver_  s.   r  c               	      s  G dd d} |  }t |d u sJ t  dt jt jdfks"J t ddddks-J t  }t j|d	}t|d
s@J |  t 	 \}}|( | t|d
sWJ t|d
s^J W d    n1 shw   Y  W d    n1 sww   Y  t d |u sJ d S )Nc                   @   s   e Zd Zdd ZdS )z7test_custom_socket_factory.<locals>.CustomSocketFactoryc                 S   s   d|||fS )Nhir   )r   r=   r>   r?   r   r   r   r     s   z>test_custom_socket_factory.<locals>.CustomSocketFactory.socketN)r'   r(   r)   r   r   r   r   r   CustomSocketFactory  s    r  r  r   rr   r   r   )r  rr   r   r   r   r   )
r6   Zset_custom_socket_factoryr   rX   rW   r"   r   r`   r   rt   )r  Zcsfr   wrappedr   r   r   r   r   test_custom_socket_factory  s$    r!  c                      s:   t t t  W d    d S 1 sw   Y  d S r   )r1   r2   rz   r6   ru   r   r   r   r   test_SocketType_is_abstract  s   
"r"  AF_UNIXzno unix domain socketsc                     s   dd } t  }d|}| |I d H  W d    n1 s w   Y  ztd d}| d| I d H  W d S  tyE   Y d S w )Nc              
      s   t jt jdl}|| I d H  |d t jt jd?}|| I d H  | I d H \}}| |dI d H  |dI d H dksFJ W d    n1 sPw   Y  W d    n1 s_w   Y  W d    d S W d    d S 1 sww   Y  d S )Nr   r   rq   rr   )	r6   r   r#  r   r   r   r   rx   ry   )pathZlsockcsockZssock_r   r   r   check_AF_UNIX  s    
"z.test_unix_domain_socket.<locals>.check_AF_UNIXz{}/sockr   asciis    trio-test-)tempfileTemporaryDirectoryr%   r   urandomhexencodeFileNotFoundError)r'  Ztmpdirr$  cookier   r   r   test_unix_domain_socket  s   

r0  c                     s(  t  \} }|  |f | d dd z	 |  q ty&   Y nw t|   fdd} fdd}t 4 I d H }|	| |	| t
 I d H     W d   I d H  n1 I d H sfw   Y  W d    n1 suw   Y  W d    d S W d    d S 1 sw   Y  d S )	NFrq   i Tc                      sD   t tj  I d H  W d    d S 1 sw   Y  d S r   )r1   r2   r   ClosedResourceErrorrx   r   r   r  r   r   sender     "z)test_interrupted_by_close.<locals>.senderc                      sD   t tj  dI d H  W d    d S 1 sw   Y  d S )Nrr   )r1   r2   r   r1  ry   r   )r   r   r   receiver  r4  z+test_interrupted_by_close.<locals>.receiver)r"   rt   r   rx   r4   r6   rv   r   r   r   r   r   )Za_stdlibZb_stdlibr3  r5  r   r   r2  r   test_interrupted_by_close  s.   





(Pr6  c            	         s$  d} g }t | d D ]/}zt \}}W n ty3 } z|jtjtjfv s(J W Y d }~ nd }~ww |||g7 }qt 4 I d H #}|D ]	}|	tj
| qFt I d H  |j  W d   I d H  n1 I d H slw   Y  |D ]}|  qs|| d d krtd|d d  d d S d S )Ni  r   rr   zUnable to open more than z	 sockets.)ranger"   rt   r   rb   EMFILEENFILEr   r   r   r   r   r   r   r   r   )	totalr   rO   r   r   er   r   r   r   r   r   test_many_sockets  s.   (
r<  )Crb   r1   r   r   r   r"   r   r)  sys_sysZ_core.tests.tutilr   r   rL   r   r   r   r6   r   r	   testingr
   r   r   Zfixturer,   r5   r;   rf   rp   r~   r   r   markZskipifr`   r   r   r   platformr   r   r   r   ZparametrizerX   paramr[   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r!  r"  r0  r6  r<  r   r   r   r   <module>   s    
L#	


3
		
_K5`,
