o
    4@Hhy                     @  s  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rd 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Z6dddZ7dddZ8ddd Z9dd!d"Z:dd#d$Z;dd%d&Z<dd'd(Z=ej>j?e@ed) d*d+dd,d-ZAdd.d/ZBedd0d1ZCej>j?ejDd2kd3d+dd4d5ZEdd6d7ZFdd8d9ZGdd<d=ZHdd>d?ZIdd@dAZJej>KdBdCejLfejMdDejNedEgddJdKZOddLdMZPddOdPZQejRdQdRG dSdT dTZSej>KdUejLeSdVdCdWdXdYfejMejNeSdZdDd[d\dYedEgdd^d_ZTdd`daZUddbdcZVeddddeZWeddfdgZXddhdiZYddjdkZZddldmZ[ddndoZ\ddpdqZ]ddrdsZ^ddtduZ_ej>j?e@edv dwd+ddxdyZ`ddzd{Zad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Z				ddddZ				ddddZ				dd ddZdS )!MonkeypatchedGAI_orig_getaddrinfo
_responsesrecordorig_getaddrinfoaCallable[[str | bytes | None, str | bytes | int | None, int, int, int, int], GetAddrInfoResponse]returnNonec                 C  s   || _ i | _g | _d S Nr   )selfr#    r)   W/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/trio/_tests/test_socket.py__init__9   s   
zMonkeypatchedGAI.__init__r   hoststr | bytes | Noneportstr | bytes | int | Nonefamilyinttypeprotoflagsr   c           
      C  s>   t | j}|j||||||d}|  |j}	|jrJ |	S Nr0   r2   r3   r4   )inspect	signaturer    bindapply_defaultsargskwargs)
r(   r,   r.   r0   r2   r3   r4   sigboundfrozenboundr)   r)   r*   _frozenbindH   s   	
zMonkeypatchedGAI._frozenbindresponseGetAddrInfoResponse | strc              
   C  s    || j | j||||||d< d S r5   )r!   r@   )r(   rA   r,   r.   r0   r2   r3   r4   r)   r)   r*   setX   s   zMonkeypatchedGAI.setc                 C  s`   |  ||||||}| j| || jv r| j| S |tj@ r)| ||||||S td| )Nz%gai called with unexpected arguments )r@   r"   appendr!   stdlib_socketAI_NUMERICHOSTr    RuntimeError)r(   r,   r.   r0   r2   r3   r4   r>   r)   r)   r*   getaddrinfom   s   	


zMonkeypatchedGAI.getaddrinfoN)r#   r$   r%   r&   )r   r   r   r   )r,   r-   r.   r/   r0   r1   r2   r1   r3   r1   r4   r1   r%   r   )rA   rB   r,   r-   r.   r/   r0   r1   r2   r1   r3   r1   r4   r1   r%   r&   )r,   r-   r.   r/   r0   r1   r2   r1   r3   r1   r4   r1   r%   rB   )__name__
__module____qualname__	__slots__r+   r@   rC   rH   r)   r)   r)   r*   r   6   s$    
r   monkeypatchpytest.MonkeyPatchr%   c                 C  s   t tj}| td|j |S )NrH   )r   rE   rH   setattr)rM   
controllerr)   r)   r*   	monkeygai   s   
rQ   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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 )NexcBaseExceptionr%   boolc                 S  s
   t | tS r'   )
isinstance
ValueError)rR   r)   r)   r*   _is_ValueError   s   
z&test__try_sync.<locals>._is_ValueError)rR   rS   r%   rT   )r   r   pytestraisesKeyErrorBlockingIOErrorrV   )rW   r)   r)   r*   test__try_sync   s>   (
"r\   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_SOCKETrE   TCP_NODELAYgaierrorntohsr)   r)   r)   r*   test_socket_has_some_reexports   s   rb   c              	     sL  d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 sMw   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 )Ngotr   expectedr%   r&   c                   s0   ddd d fd
d}|| ||ksJ d S )Ngai_tupr   r%   atuple[AddressFamily, SocketKind, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]c                 S  s   | \}}}}}|||fS r'   r)   )re   r0   type__proto
_canonnamesockaddrr)   r)   r*   interesting_fields   s   
z;test_getaddrinfo.<locals>.check.<locals>.interesting_fieldsgai_listr   glist[tuple[AddressFamily, SocketKind, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]]c                   s    fdd| D S )Nc                   s   g | ]} |qS r)   r)   ).0re   rk   r)   r*   
<listcomp>   s    zEtest_getaddrinfo.<locals>.check.<locals>.filtered.<locals>.<listcomp>r)   )rl   ro   r)   r*   filtered   s   	z1test_getaddrinfo.<locals>.check.<locals>.filtered)re   r   r%   rf   )rl   r   r%   rm   r)   )rc   rd   rq   r)   ro   r*   check   s   
ztest_getaddrinfo.<locals>.check	127.0.0.112345r2    )rs   90  ::1)rx   rw   r   r   x   hostr.   r   r6   r,   )rz   r.   r   r   r   r   EAI_BADHINTSasdf)rc   r   rd   r   r%   r&   )r   r]   rH   SOCK_STREAMAF_INETIPPROTO_TCP
SOCK_DGRAMAF_INET6IPPROTO_UDPrC   r"   rX   rY   r`   EAI_SOCKTYPEaddEAI_SERVICEhasattrr|   valueerrnorG   )rQ   rr   resexcinfoexpected_errnosr)   r)   r*   test_getaddrinfo   sh   

 $r   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)rs   i  )rs   1234)z
google.comP   r   )	localhostr   rs   r   rs   80)	rE   NI_NUMERICHOSTNI_NUMERICSERVr   r]   getnameinforX   rY   r`   )
ni_numericrc   r,   servicer)   r)   r*   test_getnameinfo  s2   r   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)rI   rJ   rK   r)   r)   r)   r*   MySocket<  s    r   )rE   
socketpairrU   r]   r   from_stdlib_socketfilenosendrecvrX   rY   	TypeErrorr   )sasbtar   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 )Nr      )
rE   r   r]   fromfdr   r0   r2   r3   r   r   )r   r   r   r)   r)   r*   test_from_fdD  s   P r   c                    s   ddd} t  \}}|M |2 t 4 I d H }|| | || | W d   I d H  n1 I d H s7w   Y  W d    n1 sFw   Y  W d    d S W d    d S 1 s^w   Y  d S )Nsockr   r%   r&   c                   s6   t d | dI d H  | dI d H dksJ d S )Nzsending hello   hr   )printr   r   )r   r)   r)   r*   childN  s   z%test_socketpair_simple.<locals>.child)r   r   r%   r&   )r]   r   r
   open_nursery
start_soon)r   abnurseryr)   r)   r*   test_socketpair_simpleM  s   
(Pr   	fromsharezwindows only)reasonc               
     s   t r
tjdkr
d S t \} }| _ |D | t }t|}|& | 	 |	 ks/J |
dI d H  |dI d H dksCJ W d    n1 sMw   Y  W d    n1 s\w   Y  W d    d S W d    d S 1 stw   Y  d S )Nwin32r   r   )r   sysplatformr]   r   shareosgetpidr   r   r   r   )r   r   shareda2r)   r)   r*   test_fromshareZ  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'   )r]   r   rU   r   r0   r   sr)   r)   r*   test_socketi  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'   )r]   r   r   r   rU   r   r0   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s4J |j	|j	ks<J |
  t| | }|j|jksQJ |j	|j	ksYJ |  |  q"d S )Nr   )r   r   r   r~   c                   s&   g | ]} fD ]}t ||qqS r)   )rE   r   )rn   r0   rg   r   r~   r)   r*   rp   |  s    
z'test_sniff_sockopts.<locals>.<listcomp>r   )r   r   r   r   r~   r   r]   r   r0   r2   detachr   close)r   r   familiessocketsr   tsocket_sockettsocket_from_fdr)   r   r*   test_sniff_sockoptsv  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|jksJ | j|jksJ | j|jksJ |   d S )NTFr{   r   r0   r   
setsockopt)r]   r   rU   r   r1   get_inheritableset_inheritabler   r   r_   
getsockoptreprr   r   dirrX   rY   AttributeErrorr}   rE   r   r2   r0   r3   )r   cm_enter_valuefdstdlib_sockr)   r)   r*   test_SocketType_basics  sH   


r   c                    s<   t  } | }t|  W d    d S 1 sw   Y  d S r'   )r]   r   setsockopt_tests)r   _r)   r)   r*   test_SocketType_setsockopt  s
   
"r   r   SocketType | SocketStreamc              
   C  s   t tdr.z| tjtjdd W n ty- } z|jdtjfv s#J W Y d}~nd}~ww | tjtj	d t
jtdd | tjtj	dd W d   n1 sSw   Y  t
jtdd | tjtj	d W d   dS 1 stw   Y  dS )	z6Extract these out, to be reused for SocketStream also.SO_BINDTODEVICENr   *   Fz"invalid value for argument 'value'match   )r   r]   r   r^   r   OSErrorr   EPERMr   r_   rX   rY   r   )r   er)   r)   r*   r     s"   
"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 Nr   r   )	r]   r   duprU   r   r   r   r   r   )r   r   r   r)   r)   r*   test_SocketType_dup  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 )Nr   r          y)	r]   r   r   r   did_shutdown_SHUT_WRshutdownSHUT_WRSHUT_RD	SHUT_RDWRr   r   r)   r)   r*   test_SocketType_shutdown  s<   



 
 
Pr   )addresssocket_typers   rx   )marksr   strr   r   c                   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	   r   r   )r]   r   r9   listengetsocknamer
   r   r   connectacceptgetpeernamer   r   )r   r   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   )r]   r   is_readabler   r
   wait_readabler   r   r)   r)   r*   test_SocketType_is_readable4  s   Pr  rT   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   r0   FT)rE   rH   r   r`   r)   r)   r)   r*   gai_without_v4mapped_is_buggyB  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)rI   rJ   rK   __annotations__r)   r)   r)   r*   r  K  s
   
 r  )r   addrsz0.0.0.0r  z255.255.255.255)r  r   r	  r
  z::1::2z::ffff:255.255.255.255r  c           
        s  | t jkd0fddd1fd	d
}t j| dىtts#J dD ]<}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rYJ |||j	df q%dD ] d2 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 rNt sNt jt jd tt j}|d&I d H  W d    n	1 s.w   Y  t jt jh}tt d'rE|t j |jj|v sNJ zt jt jt jd(}W n ttfye   Y nw t|tsnJ |jd) dI d H d)ks}J |  d*}	tjt|	d+ |d,I d H  W d    n	1 sw   Y  tjt|	d+ |d-I d H  W d    n	1 sw   Y  tjt|	d+ r|d.I d H  n|d/I d H  W d    n	1 sw   Y  qdW d    d S 1 sw   Y  d S )3Nr   tuple[str | int, ...]r%   c                   s(    rt | dk r| d7 } t | dk s| S )N   )r   )len)r   )v6r)   r*   pado  s
   z$test_SocketType_resolve.<locals>.padactualrd   r&   c                   s    | | ks
J d S r'   r)   )r  rd   )r  r)   r*   	assert_equ  s   z*test_SocketType_resolve.<locals>.assert_eqr  Nrv   r   TlocalF)FTr;   tuple[str, int] | tuple[str, int, int] | tuple[str, int, int, int] | tuple[str, str] | tuple[str, str, int] | tuple[str, str, int, int]c                   s.   j |  dI d H }t|tsJ td|S )Nr  ztuple[Union[str, int], ...])_resolve_address_nocprU   tupler   )r;   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)r0   r2   r}   H^address should be a \(host, port(, \[flowinfo, \[scopeid\]\])*\) tuple$r   r  )r  )r  r   r   r   r   )r  r   r   r   )r   r  r%   r  )r  r  rd   r  r%   r&   )r;   r  r%   r  ) r]   r   r   rU   r   r  r   bytesr  r   r	  r   IPPROTO_IPV6IPV6_V6ONLYr
  r  rX   rY   r`   
EAI_NONAME
EAI_NODATAr   r   r  r   r   
AF_NETLINKr   r   r   r   rV   )
r   r  r  nullrc   r   r   r   netlink_sockr   r)   )r  r  r   r  r*   test_SocketType_resolveT  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)r   r   r   rs   
   r   r   )z1.2:3r{   )
r]   r   r9   r   r   r   r   rX   rY   r`   )r   sock2r)   r)   r*    test_SocketType_unresolved_names  s$   




"r*  c                    sT  t  \} }|  |x 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swJ W d    n1 sw   Y  t	 % t
t  dI d H  W d    n1 sw   Y  W d    n1 sw   Y  d 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  d 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|d fd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 szw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )NF   1r(  hahar%   r&   c                     sF   t    dI d H dksJ W d    d S 1 sw   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                	     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   rX   rY   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 sw   Y  t   dI d H dks0J W d    d S 1 s;w   Y  d S )Nr      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 )Nr   r4  r3  r.  r)   r5  r)   r*   t25  r8  z.test_SocketType_non_blocking_paths.<locals>.t2r4  r3  r%   r&   )rE   r   r]   r   setblockingr   r
   CancelScopecancelr   rX   rY   r1  r   r   r   r   r   cancel_scope)r   r   cscoper0  r   r2  r7  r9  r)   r5  r*   "test_SocketType_non_blocking_paths  sh   




(
*





*Tr@  c                    s  t  'tjtdd 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 s[w   Y  W d    n1 sjw   Y  W d    n1 syw   Y  t  t  t  k} | 
dI d H  |   G  fdddtj}ttsJ 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  1tjtd	d d
I d H  W d    n1 s?w   Y  W d    d S W d    d S 1 sXw   Y  d S )Nr  r   r   r   rs   r   c                      s   e Zd Zd fddZdS )	z3test_SocketType_connect_paths.<locals>.CancelSocketr   r   r%   r&   c                   s>   t tsJ    t|  | j| j_j	| t
r'   )rU   r   r=  rE   r   r   r0   r2   _sockr   r[   )r(   r   r>  r   r)   r*   r   b  s   z;test_SocketType_connect_paths.<locals>.CancelSocket.connectN)r   r   r%   r&   )rI   rJ   rK   r   r)   rC  r)   r*   CancelSocketa  s    rD  r{   z^^\[\w+ \d+\] Error connecting to \('127\.0\.0\.\d', \d+\): (Connection refused|Unknown error)$)rs   r	   )r]   r   rX   rY   rV   r   r
   r<  r=  r1  r9   r   rE   rU   r   rB  r   r   r   r   r   )r   rD  r)   rC  r*   test_SocketType_connect_pathsG  sd   

	


 
% $rE  c               	     s   d} t  6}tjtd| dd || dfI d H  W d    n1 s(w   Y  W d    d S W d    d S 1 s@w   Y  d S )Nrs   z#^\[\w+ \d+\] Error connecting to \(z*, 2\): (Connection refused|Unknown error)$r   r	   )r]   r   rX   rY   r   r   )r   r   r)   r)   r*   test_address_in_socket_error  s   

"rF  c                    s   t  o t R} d fdd}t| tsJ || _t & t	t j
 | d	I d H  W d    n1 s9w   Y  W d    n1 sHw   Y  |  d
ksUJ W d    n1 s_w   Y  W d    d S W d    d S 1 sww   Y  d S )Nr   r   r  rT   r%   r&   c                  s0   | 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_nocprv   r{   )r   r   r  rT   r%   r&   )r
   r<  r]   r   rU   r   r  r   rX   rY   r1  r   r   )r   r  r)   rH  r*   7test_resolve_address_exception_in_connect_closes_socket  s"   


"rI  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 )Nr   r   r(  s
   x         sendmsgs   xxxr   ru   rA  r   MSG_MOREs   yyys   zzzs	   xxxyyyzzzs
   xxx       recvmsgr   recvmsg_intos   xyzwr  r	   s   xys   zw s   yzs   xyz)r]   r   r   r   MSG_PEEK	bytearray	recv_intor   rJ  r   r   r9   r   sendtorecvfromrK  recvfrom_intorL  rM  r   )r   r   buftargetstargetdatar   nbytesancdata	msg_flagsbuf1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 tddI d H dks5J tddI d H dksBJ tddI d H dksOJ td
dI d H dks\J tddI d H dksiJ d S )Nu
   ok faß.des   xn--fa-hia.der   zok ::1rx   )r4   s   ::1badzfass.dezxn--fa-hia.deu   faß.de)rC   r   r]   rH   )rQ   r)   r)   r*   	test_idna  s   r`  c                     s6   t dI d H dksJ t dI d H dksJ d S )Nudp   tcp   )r]   getprotobynamer)   r)   r)   r*   test_getprotobyname'  s   rf  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dZdddZdS )z5test_custom_hostname_resolver.<locals>.CustomResolverr,   r   r.   r0   r1   r2   r3   r4   r%   (tuple[str, str, str, int, int, int, int]c                   s   d||||||fS )N
custom_gair)   )r(   r,   r.   r0   r2   r3   r4   r)   r)   r*   rH   1  s   	zAtest_custom_hostname_resolver.<locals>.CustomResolver.getaddrinforj   +tuple[str, int] | tuple[str, int, int, int]<tuple[str, tuple[str, int] | tuple[str, int, int, int], int]c                   s   d||fS )N
custom_gnir)   )r(   rj   r4   r)   r)   r*   r   <  s   
zAtest_custom_hostname_resolver.<locals>.CustomResolver.getnameinfoN)r,   r   r.   r   r0   r1   r2   r1   r3   r1   r4   r1   r%   rg  )rj   ri  r4   r1   r%   rj  )rI   rJ   rK   rH   r   r)   r)   r)   r*   CustomResolver0  s    
rl  r   r   foorh  s	   localhostu   föö)rh  s
   xn--f-1gaarm  r   r   r   r   r   )rk  r   r   ry   rz   r.   r6   r,   )	r]   set_custom_hostname_resolverr   r~   r   AI_CANONNAMErH   r   rC   )rQ   rl  crvalsrc   rd   r)   r)   r*   test_custom_hostname_resolver.  s.   rr  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	d
ZdS )z7test_custom_socket_factory.<locals>.CustomSocketFactoryr0   r   r2   r   r3   r1   r%   *tuple[str, AddressFamily, SocketKind, int]c                 S  s   d|||fS )Nhir)   )r(   r0   r2   r3   r)   r)   r*   r   m  s   z>test_custom_socket_factory.<locals>.CustomSocketFactory.socketN)r0   r   r2   r   r3   r1   r%   rs  )rI   rJ   rK   r   r)   r)   r)   r*   CustomSocketFactoryl  s    ru  rt  r   r   r	   r   )rt  r   r	   r   r   r9   )
r]   set_custom_socket_factoryr   r   r~   rE   r   r   r   r   )ru  csfr   wrappedr   r   r)   r)   r*   test_custom_socket_factoryk  s$   	 ry  c                   C  s8   t t t  W d    d S 1 sw   Y  d S r'   )rX   rY   r   r]   r   r)   r)   r)   r*   test_SocketType_is_abstract  s   
"rz  AF_UNIXzno unix domain socketsc                    s   ddd} t  +}| | dI d H  | t| dI d H  | t| d	I d H  W d    n1 s8w   Y  ztd
 d}| d| I d H  W d S  ty]   Y d S w )Npathstr | bytes | os.PathLike[str]r%   r&   c              
     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(  r   r   )	r]   r   r{  r9   r   r   r   r   r   )r|  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-)r|  r}  r%   r&   )	tempfileTemporaryDirectoryr   r   fsencodeurandomhexencodeFileNotFoundError)r  tmpdircookier)   r)   r*   test_unix_domain_socket  s   

r  c                    s,  t  \} }|  |h | d dd z	 |  q ty&   Y nw t|  d fdd}d fd	d
}t 4 I d H }|	| |	| t
 I d H     W d   I d H  n1 I d H shw   Y  W d    n1 sww   Y  W d    d S W d    d S 1 sw   Y  d S )NFr   i Tr%   r&   c                     sD   t tj  I d H  W d    d S 1 sw   Y  d S r'   )rX   rY   r
   ClosedResourceErrorr   r)   r   rW  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 )Nr   )rX   rY   r
   r  r   r)   )r   r)   r*   receiver  r  z+test_interrupted_by_close.<locals>.receiverr:  )rE   r   r;  r   r[   r]   r   r
   r   r   r   r   )a_stdlibb_stdlibr  r  r   r)   r  r*   test_interrupted_by_close  s.   





(Pr  c                    s  d} g }t d| dD ]7}zt \}}W n& ty; } z|jtjtjfv s(J td| d W Y d }~ nd }~ww |||g7 }qt	 4 I d H #}|D ]	}|
tj| qNt I d H  |j  W d   I d H  n1 I d H stw   Y  |D ]}|  q{d S )Ni  r   r	   zUnable to open more than z	 sockets.)rangerE   r   r   r   EMFILEENFILEr   r
   r   r   r  r   r>  r=  r   )totalr   openedr   r   rR   r   r   r)   r)   r*   test_many_sockets  s,   (
r  )rM   rN   r%   r   r:  )rQ   r   r%   r&   )r   r   r%   r&   )r   r   r   r   r%   r&   )r%   rT   )r   r   r  r  r%   r&   )c
__future__r   r   r7   r   r   rE   r   r  pathlibr   r   r   typingr   r   r   attrsrX   rv   r
   r]   _core._tests.tutilr   r   r   r   _socketr   r   r   r   r   testingr   r   collections.abcr   typing_extensionsr   _highlevel_socketr   r  r1   r   r  r   r  listr   r   r   r   fixturerQ   r\   rb   r   r   r   r   r   markskipifr   r   r   r   r   r   r   r   r   r   r   parametrizer   paramr   r   r  r  definer  r'  r*  r@  rE  rF  rI  r^  r`  rf  rr  ry  rz  r  r  r  r)   r)   r)   r*   <module>   s    (	J



Z
#

	

!
3

!



		
}
KI


`


=
 
 