o
    dTi                     @  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' e(eee)e*e(e*e)f e(e*e)e)e)f B e(e)e+f B f Z,de-d< e.e, Z/de-d< e(e*e+B dB e*e+B e)B dB e)e)e)e)f Z0de-d< nde-d< e1Z/e1Z0G dd dZ2ej3d}ddZ4d~ddZ5d~ddZ6dddZ7d~d d!Z8d~d"d#Z9d~d$d%Z:d~d&d'Z;ej<j=e>ed( d)d*d~d+d,Z?d~d-d.Z@ed~d/d0ZAej<j=ejBd1kd2d*d~d3d4ZCd~d5d6ZDd~d7d8ZEdd;d<ZFd~d=d>ZGd~d?d@ZHej<IdAdBejJfejKdCejLedDgddIdJZMd~dKdLZNddNdOZOejPdPdQG dRdS dSZQej<IdTejJeQdUdBdVdWdXfejKejLeQdYdCdZd[dXedDgdd]d^ZRd~d_d`ZSd~dadbZTed~dcddZUed~dedfZVd~dgdhZWd~didjZXddkdlZYd~dmdnZZddodpZ[d~dqdrZ\d~dsdtZ]ej<j=e>edu dvd*d~dwdxZ^d~dydzZ_d~d{d|Z`dS )    )annotationsN)Path)AddressFamily
SocketKind)TYPE_CHECKING	TypeAlias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)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(   S/home/air/sos-pdf/back/venv/lib/python3.10/site-packages/trio/_tests/test_socket.py__init__7   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r/   r1   r2   r3   )inspect	signaturer   bindapply_defaultsargskwargs)
r'   r+   r-   r/   r1   r2   r3   sigboundfrozenboundr(   r(   r)   _frozenbindF   s   	
zMonkeypatchedGAI._frozenbindresponseGetAddrInfoResponse | strc              
   C  s    || j | j||||||d< d S r4   )r    r?   )r'   r@   r+   r-   r/   r1   r2   r3   r(   r(   r)   setV   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-   r/   r1   r2   r3   r=   r(   r(   r)   getaddrinfok   s   	


zMonkeypatchedGAI.getaddrinfoN)r"   r#   r$   r%   )r   r   r   r   )r+   r,   r-   r.   r/   r0   r1   r0   r2   r0   r3   r0   r$   r   )r@   rA   r+   r,   r-   r.   r/   r0   r1   r0   r2   r0   r3   r0   r$   r%   )r+   r,   r-   r.   r/   r0   r1   r0   r2   r0   r3   r0   r$   rA   )__name__
__module____qualname__	__slots__r*   r?   rB   rG   r(   r(   r(   r)   r   4   s$    
r   monkeypatchpytest.MonkeyPatchr$   c                 C  s   t tj}| td|j |S )NrG   )r   rD   rG   setattr)rL   
controllerr(   r(   r)   	monkeygai~   s   
rP   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)rQ   r(   r(   r)   _is_ValueError   s   
z&test__try_sync.<locals>._is_ValueError)rQ   rR   r$   rS   )r   r   pytestraisesKeyErrorBlockingIOErrorrU   )rV   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_SOCKETrD   TCP_NODELAYgaierrorntohsr(   r(   r(   r)   test_socket_has_some_reexports   s   ra   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(   )rd   r/   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(   ).0rd   rj   r(   r)   
<listcomp>   s    zEtest_getaddrinfo.<locals>.check.<locals>.filtered.<locals>.<listcomp>r(   )rk   rn   r(   r)   filtered   s   	z1test_getaddrinfo.<locals>.check.<locals>.filtered)rd   r   r$   re   )rk   r   r$   rl   r(   )rb   rc   rp   r(   rn   r)   check   s   
ztest_getaddrinfo.<locals>.check	127.0.0.112345r1    )rr   90  ::1)rw   rv   r   r   x   hostr-   r   r5   r+   )ry   r-   r   r   r   r   EAI_BADHINTSasdf)rb   r   rc   r   r$   r%   )r   r\   rG   SOCK_STREAMAF_INETIPPROTO_TCP
SOCK_DGRAMAF_INET6IPPROTO_UDPrB   r!   rW   rX   r_   EAI_SOCKTYPEaddEAI_SERVICEhasattrr{   valueerrnorF   )rP   rq   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)rr   i  )rr   1234)z
google.comP   r   )	localhostr   rr   r   rr   80)	rD   NI_NUMERICHOSTNI_NUMERICSERVr   r\   getnameinforW   rX   r_   )
ni_numericrb   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)rH   rI   rJ   r(   r(   r(   r)   MySocket:  s    r   )rD   
socketpairrT   r\   r   from_stdlib_socketfilenosendrecvrW   rX   	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      )
rD   r   r\   fromfdr   r/   r1   r2   r   r   )r   r   r   r(   r(   r)   test_from_fdB  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)   childL  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_simpleK  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_fromshareX  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   rT   r   r/   r~   sr(   r(   r)   test_socketg  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   rT   r   r/   r   r(   r(   r)   test_socket_v6m  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(   )rD   r   )rm   r/   rf   r   r}   r(   r)   ro   z  s    
z'test_sniff_sockopts.<locals>.<listcomp>r   )r   r~   r   r   r}   r   r\   r   r/   r1   detachr   close)r~   r   familiessocketsr   tsocket_sockettsocket_from_fdr(   r   r)   test_sniff_sockoptst  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 )NTFrz   r   r/   r   
setsockopt)r\   r   rT   r   r0   get_inheritableset_inheritabler   r   r^   
getsockoptreprr   r   dirrW   rX   AttributeErrorr|   rD   r   r1   r/   r2   )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^   rW   rX   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   duprT   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_typerr   rw   )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   r8   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  rS   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)rD   rG   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)rH   rI   rJ   __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actualrc   r%   c                   s    | | ks
J d S r&   r(   )r  rc   )r  r(   r)   	assert_equ  s   z*test_SocketType_resolve.<locals>.assert_eqr  Nru   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  r  )_resolve_address_nocprT   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)r/   r1   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  rc   r  r$   r%   )r:   r  r$   r  ) r\   r   r   rT   r   r  r   bytesr  r   r  r   IPPROTO_IPV6IPV6_V6ONLYr	  r  rW   rX   r_   
EAI_NONAME
EAI_NODATAr   r   r  r   r   
AF_NETLINKr   r   r   r   rU   )
r   r  r  nullrb   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   rr   
   r   r   )z1.2:3rz   )
r\   r   r8   r   r   r   r   rW   rX   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   rW   rX   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   r3  r2  r-  r(   r4  r(   r)   t25  r7  z.test_SocketType_non_blocking_paths.<locals>.t2r3  r2  r$   r%   )rD   r   r\   r   setblockingr   r
   CancelScopecancelr   rW   rX   r0  r   r   r   r   r   cancel_scope)r   r   cscoper/  r   r1  r6  r8  r(   r4  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   rr   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&   )rT   r   r<  rD   r   r   r/   r1   _sockr   rZ   )r'   r   r=  r   r(   r)   r   b  s   z;test_SocketType_connect_paths.<locals>.CancelSocket.connectN)r   r   r$   r%   )rH   rI   rJ   r   r(   rB  r(   r)   CancelSocketa  s    rC  rz   z^^\[\w+ \d+\] Error connecting to \('127\.0\.0\.\d', \d+\): (Connection refused|Unknown error)$)rr   r	   )r\   r   rW   rX   rU   r   r
   r;  r<  r0  r8   r   rD   rT   r   rA  r   r   r   r   r   )r   rC  r(   rB  r)   test_SocketType_connect_pathsG  sd   

	


 
% $rD  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 )Nrr   z#^\[\w+ \d+\] Error connecting to \(z*, 2\): (Connection refused|Unknown error)$r   r	   )r\   r   rW   rX   r   r   )r   r   r(   r(   r)   test_address_in_socket_error  s   

"rE  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  rS   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_nocpru   rz   )r   r   r  rS   r$   r%   )r
   r;  r\   r   rT   r   r  r   rW   rX   r0  r   r   )r   r  r(   rG  r)   7test_resolve_address_exception_in_connect_closes_socket  s"   


"rH  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   rt   r@  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   rI  r   r   r8   r   sendtorecvfromrJ  recvfrom_intorK  rL  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 ::1rw   )r3   s   ::1badzfass.dezxn--fa-hia.deu   faß.de)rB   r   r\   rG   )rP   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   re  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-   r/   r0   r1   r2   r3   r$   (tuple[str, str, str, int, int, int, int]c                   s   d||||||fS )N
custom_gair(   )r'   r+   r-   r/   r1   r2   r3   r(   r(   r)   rG   1  s   	zAtest_custom_hostname_resolver.<locals>.CustomResolver.getaddrinfori   +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'   ri   r3   r(   r(   r)   r   <  s   
zAtest_custom_hostname_resolver.<locals>.CustomResolver.getnameinfoN)r+   r   r-   r   r/   r0   r1   r0   r2   r0   r3   r0   r$   rf  )ri   rh  r3   r0   r$   ri  )rH   rI   rJ   rG   r   r(   r(   r(   r)   CustomResolver0  s    
rk  r   r   foorg  s	   localhostu   föö)rg  s
   xn--f-1gaarl  r   r   r   r   r   )rj  r   r   rx   ry   r-   r5   r+   )	r\   set_custom_hostname_resolverr~   r}   r   AI_CANONNAMErG   r   rB   )rP   rk  crvalsrb   rc   r(   r(   r)   test_custom_hostname_resolver.  s.   rq  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>.CustomSocketFactoryr/   r   r1   r   r2   r0   r$   *tuple[str, AddressFamily, SocketKind, int]c                 S  s   d|||fS )Nhir(   )r'   r/   r1   r2   r(   r(   r)   r   m  s   z>test_custom_socket_factory.<locals>.CustomSocketFactory.socketN)r/   r   r1   r   r2   r0   r$   rr  )rH   rI   rJ   r   r(   r(   r(   r)   CustomSocketFactoryl  s    rt  rs  r   r   r	   r   )rs  r   r	   r   r   r8   )
r\   set_custom_socket_factoryr   r~   r}   rD   r   r   r   r   )rt  csfr   wrappedr   r   r(   r(   r)   test_custom_socket_factoryk  s$   	 rx  c                   C  s8   t t t  W d    d S 1 sw   Y  d S r&   )rW   rX   r   r\   r   r(   r(   r(   r)   test_SocketType_is_abstract  s   
"ry  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   rz  r8   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&   )rW   rX   r
   ClosedResourceErrorr   r(   r   rV  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   )rW   rX   r
   r  r   r(   )r   r(   r)   receiver  r  z+test_interrupted_by_close.<locals>.receiverr9  )rD   r   r:  r   rZ   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.)rangerD   r   r   r   EMFILEENFILEr   r
   r   r   r   r   r=  r<  r   )totalr   openedr   r   rQ   r   r   r(   r(   r)   test_many_sockets  s,   (
r  )rL   rM   r$   r   r9  )rP   r   r$   r%   )r   r   r$   r%   )r   r   r   r   r$   r%   )r$   rS   )r   r   r  r  r$   r%   )a
__future__r   r   r6   r   r   rD   r   r  pathlibr   r   r   typingr   r   r   attrsrW   ru   r
   r\   _core._tests.tutilr   r   r   r   _socketr   r   r   r   r   testingr   r   collections.abcr   _highlevel_socketr   r  r0   r   r  r   r
  listr   r   r   r   fixturerP   r[   ra   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?  rD  rE  rH  r]  r_  re  rq  rx  ry  r  r  r  r(   r(   r(   r)   <module>   s    &
	J



Z
#

	

!
3

#



		
}
KI


`


=
 
 