a
    xd!                     @   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   N/var/www/html/Ranjet/env/lib/python3.9/site-packages/trio/tests/test_socket.py__init__   s    zMonkeypatchedGAI.__init__c                 O   s8   t | j}|j|i |}|  |j}|jr4J |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 r0| j| S |d tj@ rN| j|i |S td|d S )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  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  q1 I d H s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  t 4 I d H  tW d   I d H  q01 I d H s&0    Y  dd } t| 4 I d H  tW d   I d H  q|1 I d H sr0    Y  t   ttT t| 4 I d H  tW d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  W d    n1 s
0    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     Hj22r5   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_SOCKETr"   TCP_NODELAYgaierrorntohsr   r   r   r   test_socket_has_some_reexportsY   s    r;   c              	      sD  dd }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 t  ( tjddtjdI d H }W d    n1 s0    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s0J t  T ttj&}tjddddI d H  W d    n1 sr0    Y  W d    n1 s0    Y  tjh}|tj ttdr|tj |jj|v sJ t  N tt" tddI d H  W d    n1 s0    Y  W d    n1 s60    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       zEtest_getaddrinfo.<locals>.check.<locals>.filtered.<locals>.<listcomp>r   )Zgai_listrD   r   r   filteredq   s    z1test_getaddrinfo.<locals>.check.<locals>.filteredr   )gotexpectedrG   r   rD   r   checkf   s    ztest_getaddrinfo.<locals>.check	127.0.0.1Z12345r>    )rK   90  ::1)rO   rN   r   r   x   hostportr   r=   r>   r?   flagshostr    )rQ   rR   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hasattrrV   valueerrnor$   )r,   rJ   resexcinfoexpected_errnosr   r   r   test_getaddrinfoe   sR    662Vrg   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 s0    Y  W d    n1 s0    Y  t N ttj" tddI d H  W d    n1 s0    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sJ d S )	N)rK   i  )rK   Z1234)z
google.comP   r   )	localhostrh   rK   rh   rK   80)	r"   NI_NUMERICHOSTNI_NUMERICSERVr
   r6   getnameinfor1   r2   r9   )Z
ni_numericrH   rU   Zservicer   r   r   test_getnameinfo   s"    0NPro   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 s0    Y  W d    n1 s0    Y  t	
t td W d    n1 s0    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)r'   r(   r)   r   r   r   r   MySocket   s   rr   )r"   
socketpairr-   r6   
SocketTypefrom_stdlib_socketfilenosendrecvr1   r2   	TypeErrorr   )sasbtarr   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 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nrp      )
r"   rs   r6   fromfdrv   r=   r>   r?   rw   rx   )rz   r{   r|   r   r   r   test_from_fd   s    r   c                     s   dd } t  \}}| |d t 4 I d H .}|| | || | W d   I d H  qt1 I d H sj0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nc                    s4   t d | dI d H  | dI d H dks0J d S )Nzsending hello   hrq   )printrw   rx   )sockr   r   r   child   s    z%test_socketpair_simple.<locals>.child)r6   rs   r   open_nursery
start_soon)r   abnurseryr   r   r   test_socketpair_simple   s    r   	fromsharezwindows only)reasonc               
      s   t  \} }|  | | t }t |}|L |  | ksJJ |dI d H  |dI d H dksrJ W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S Nrp   rq   )	r6   rs   Zshareosgetpidr   rv   rw   rx   )r   r   Zshareda2r   r   r   test_fromshare   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   )r6   r   r-   rt   r=   rY   sr   r   r   test_socket  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   )r6   r   r\   r[   r-   rt   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 || q0q$|D ]~}tj | d}|j	|j	ksrJ |j
|j
ksJ |  t| | |}	|	j	|j	ksJ |	j
|j
ksJ |	  |  qNd S )Nr   )rY   r\   r[   rX   rv   )r   rY   r\   r[   rX   r!   r"   r6   rv   r=   r>   detachr   close)
rY   r\   r[   rX   socketsr=   r>   r   Ztsocket_socketZtsocket_from_fdr   r   r   test_sniff_sockopts  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	sJ W d    n1 s0    Y  |  dksJ t|  t  :} |  }|  |ksJ |  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 sJ tt | j W d    n1 s0    Y  t }t |} | jt|jksJ | j|jksJ | j|jksJ |   d S )NTFr    r   r=   rx   
setsockopt)r6   r   r-   rv   intget_inheritableset_inheritabler   rZ   r8   
getsockoptreprr   r   dirr1   r2   AttributeErrorrW   r"   ru   r>   _tsocketZreal_socket_typer=   r?   )r   Zcm_enter_valuefdZstdlib_sockr   r   r   test_SocketType_basics:  s@    
2
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 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S r   )	r6   rs   dupr-   rt   rv   r   rw   rx   )r   r   r   r   r   r   test_SocketType_dupm  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sJ |dI d H  | dI d H dksJ W d    n1 s0    Y  W d    n1 s0    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rJ | t j | jsJ W d    n1 s0    Y  W d    n1 s0    Y  d S )Nrp   rq   rF      y)	r6   rs   rw   rx   Zdid_shutdown_SHUT_WRshutdownSHUT_WRSHUT_RD	SHUT_RDWRr   r   r   r   r   test_SocketType_shutdowny  s,    



TLr   zaddress, socket_typerK   rO   )Zmarksc                    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  q1 I d H s0    Y  |Z ||
   kr| ksn J |dI d H  |dI d H dksJ W d    n1 s0    Y  W d    n1 s40    Y  W d    n1 sT0    Y  d S )Nr      r   rp   rq   )r6   r   r   listengetsocknamer   r   r   connectacceptgetpeernamerw   rx   )addresssocket_type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 s0    Y  W d    n1 s0    Y  d S r   )r6   rs   Zis_readablerw   r   wait_readablerx   r   r   r   r   test_SocketType_is_readable  s    r   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)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ZdD ]T}j|dfdd	I d H }|||jdf j|dfd
d	I d H }|||jdf q6d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 s$0    Y  t jh}tt drN|t j |jj|v s`J zt jt jt jd }W n ttfy   Y n(0 |jd! d	I d H d!ksJ |  tt |d"I d H  W d    n1 s0    Y  tt |d#I d H  W d    n1 s 0    Y  tt4 rL|d$I d H  n|d%I d H  W d    q1 sp0    Y  qW d    n1 s0    Y  d S )&Nc                    s    rt | dk r| d7 } q| S )N   )r   )len)r   )v6r   r   pad  s    
z$test_SocketType_resolve.<locals>.padc                    s    | | ksJ d S r   r   )actualrI   )r   r   r   	assert_eq  s    z*test_SocketType_resolve.<locals>.assert_eqr   )NrM   rh   T)localF)FTc                     s   j | d iI d H S )Nr   )_resolve_address_nocp)r   )r   r   r   r   rd     s    z$test_SocketType_resolve.<locals>.reshttp)r   rh   )r   rh   r   r   )r   rh   r   )r   rh   rq   )r   rh   rq   r   )r   rh   rq   r   )r   rk   )r   rk   r   )r   rk   r   r   )r   rk   rq   )r   rk   rq   r   )r   r   )z::ffff:1.2.3.4rh   )z<broadcast>{   r   )r   rh   EAI_ADDRFAMILY)r=   r>   rW   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_NONAMEra   r_   r   rb   rc   
AF_NETLINKr[   r   OSErrorr   r.   )	r   addrsr   nullrH   rd   re   rf   Znetlink_sockr   )r   r   r   r   r   test_SocketType_resolve  sj    

 .
..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 s0    Y  W d    n1 s0    Y  t  L} tt j	  | dI d H  W d    n1 s0    Y  W d    n1 s
0    Y  d S )N)ri   r   r   rK   
   ri   rq   )z1.2:3r    )
r6   r   r   r   r   r   r   r1   r2   r9   )r   Zsock2r   r   r    test_SocketType_unresolved_namesC  s    


P
r   c                     s@  t  \} }|  | t|  |d |d t z}|  t	 L t
tj   dI d H  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  t	 $  dI d H dk W d    n1 s0    Y  t	 L t
t   dI d H  W d    n1 s@0    Y  W d    n1 s`0    Y   fdd}t 4 I d H 8}|| t I d H  |d W d   I d H  q1 I d H s0    Y   fdd	}t 4 I d H 8}|| t I d H  |j  W d   I d H  qB1 I d H s80    Y  t| f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  q1 I d H s0    Y  W d    n1 s0    Y  W d    n1 s20    Y  d S )NF   1r   Zhahac                      sB   t  (  dI d H dks J W d    n1 s40    Y  d S )Nr      2r
   rx   r   r|   r   r   do_successful_blocking_recvm  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
   r1   r2   r   	Cancelledrx   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 s40    Y  t  ( dI d H dks^J W d    n1 sr0    Y  d S )Nrq      a   br   r   r|   tbr   r   t1  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 )Nrq   r   r   r   r   r   r   r   t2  s    6z.test_SocketType_non_blocking_paths.<locals>.t2r   r   )r"   rs   r6   ru   setblockingrw   r   CancelScopecancelr
   r1   r2   r   rx   ry   r   r   r   cancel_scope)r   r   Zcscoper   r   r   r   r   r   r   r   "test_SocketType_non_blocking_pathsV  sJ    



j2P
8
8





r   c                     s  t  Jtt  dI d H  W d    n1 s:0    Y  W d    n1 sX0    Y  t  |t T    ttj	  dI d H  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  t " t  t  } | 
dI d H  |   G  fdddtj}j  | _t R ttj	$ |  I d H  W d    n1 s0    Y  W d    n1 s0    Y   dksJ W d    n1 s0    Y  W d    n1 s
0    Y  W d    n1 s*0    Y  t  Ltt  dI d H  W d    n1 sp0    Y  W d    n1 s0    Y  d S )Nri   rj   rK   r   c                       s   e Zd Z fddZdS )z3test_SocketType_connect_paths.<locals>.CancelSocketc                    s:       t|  | j| j_jj|i | td S 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    )rK   r   )r6   r   r1   r2   r.   r   r   r   r   r   r   r   r"   r   r   r
   r   rv   r   )r   r   r   r   r   test_SocketType_connect_paths  s,    
L

j

Tr
r   c                     s   t   t }  fdd}|| _t L tt j  | 	dI d H  W d    n1 s`0    Y  W d    n1 s~0    Y  | 
 dksJ W d    n1 s0    Y  W d    n1 s0    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_nocprM   r    )r   r   r6   r   r   r
   r1   r2   r   r   rv   )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sJ t| dr| dgg I d H dksJ |dI d H dksJ W d    n1 s0    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sJ |dI d H \}}|dksJ ||  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sJ |dksJ ||  ksJ t|drH| d| I d H dksJ |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sJ |
dksJ |dksJ |g ksJ |	dksJ ||  ksJ 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 s0    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 )Nrp   rq   r   s
   x         sendmsgs   xxxr~   rL   r   ri   MSG_MOREs   yyys   zzzs	   xxxyyyzzzs
   xxx       recvmsgr   recvmsg_intos   xyzwr   r   s   xys   zw s   yzs   xyz)r6   rs   rw   rx   MSG_PEEK	bytearray	recv_intora   r   r   r[   r   r   sendtorecvfromr   recvfrom_intor   r   r   )r   r   buftargetstargetdatar   nbytes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 dtddI d H kshJ dtddI d H ksJ dtddI d H ksJ dtd
dI d H ksJ dtddI d H ksJ d S )Nu
   ok faß.des   xn--fa-hia.derh   zok ::1rO   )rT   s   ::1badzfass.dezxn--fa-hia.deu   faß.de)r   r   r6   r&   )r,   r   r   r   	test_idnaF  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   )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 ]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sJ t d
dI d H dksJ t d |u sJ | jdddddddd t ddI d H dksJ 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   rU   rR   r=   r>   r?   rT   r   r   r   r&   a  s    zAtest_custom_hostname_resolver.<locals>.CustomResolver.getaddrinfoc                    s
   d||fS )N
custom_gnir   )r   rA   rT   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   rP   rQ   rR   rS   rU   )	r6   Zset_custom_hostname_resolverrY   rX   rZ   AI_CANONNAMEr&   rn   r   )r,   r  ZcrvalsrH   rI   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sBJ t ddddksXJ t  }t j|d	}t|d
s~J |  t 	 \}}|P |, t|d
sJ t|d
sJ W d    n1 s0    Y  W d    n1 s0    Y  t d |u s
J 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   rq   r   r~   )r  rq   r   r~   r   r   )
r6   Zset_custom_socket_factoryr   rY   rX   r"   r   ra   r   rs   )r  Zcsfr   wrappedr   r   r   r   r   test_custom_socket_factory  s    Jr  c                      s6   t t t  W d    n1 s(0    Y  d S r   )r1   r2   ry   r6   rt   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>0    Y  z*td d}| d| I d H  W n ty   Y n0 d S )Nc              
      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sJ W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r   rp   rq   )	r6   r   r  r   r   r   r   rw   rx   )pathZlsockZ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    

,r+  c                     s  t  \} }|  | | d dd z|  q,W n tyL   Y n0 t|   fdd} fdd}t 4 I d H >}|	| |	| t
 I d H     W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  W d    n1 s
0    Y  d S )NFrp   i c                      s@   t tj   I d H  W d    n1 s20    Y  d S r   )r1   r2   r   ClosedResourceErrorrw   r   r   r  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 )Nrq   )r1   r2   r   r,  rx   r   )r   r   r   receiver  s    z+test_interrupted_by_close.<locals>.receiver)r"   rs   r   rw   r4   r6   ru   r   r   r   r   r   )Za_stdlibZb_stdlibr.  r/  r   r   r-  r   test_interrupted_by_close  s     



r0  c            	         s,  d} g }t | d D ]j}zt \}}W nH typ } z0|jtjtjfv sNJ W Y d }~ qW Y d }~n
d }~0 0 |||g7 }qt 4 I d H F}|D ]}|	tj
| qt I d H  |j  W d   I d H  q1 I d H s0    Y  |D ]}|  q|| d d kr(td|d d  d d S )Ni  r   rq   zUnable to open more than z	 sockets.)ranger"   rs   r   rc   ZEMFILEZENFILEr   r   r   r   r   r   r   r   r   )	totalr   rP   r   r   er   r   r   r   r   r   test_many_sockets  s$    $4
r4  )Crc   r1   r   r   r   r"   r   r$  sys_sysZ_core.tests.tutilr   r   rM   r   r   r   r6   r   r	   Ztestingr
   r   r   Zfixturer,   r5   r;   rg   ro   r}   r   r   markZskipifra   r   r   r   platformr   r   r   r   ZparametrizerY   paramr\   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r+  r0  r4  r   r   r   r   <module>   s   
L#	


3
		
_K5`,
