a
    QIhy                     @  st  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZ d dlmZmZmZ d dlZd dlZddlmZmZ ddlmZmZmZmZ dd	lmZmZmZmZm Z  dd
l!m"Z"m#Z# e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ddZ6ddddZ7ddddZ8dddd d!Z9ddd"d#Z:ddd$d%Z;ddd&d'Z<ddd(d)Z=ej>j?e@ed* d+d,ddd-d.ZAddd/d0ZBeddd1d2ZCej>j?ejDd3kd4d,ddd5d6ZEddd7d8ZFddd9d:ZGd;dd<d=d>ZHddd?d@ZIdddAdBZJej>KdCdDejLfejMdEejNedFgdGdHddIdJdKZOdddLdMZPdNddOdPZQejRdQdRG dSdT dTZSej>KdUejLeSdVdDdWdXdYfejMejNeSdZdEd[d\dYedFgdHdTdd]d^d_ZTddd`daZUdddbdcZVedddddeZWedddfdgZXdddhdiZYdddjdkZZddddldmZ[dddndoZ\ddddpdqZ]dddrdsZ^dddtduZ_ej>j?e@edv dwd,dddxdyZ`dddzd{Zaddd|d}ZbdS )~    )annotationsN)Path)AddressFamily
SocketKind)TYPE_CHECKINGUnioncast   )_coresocket)
binds_ipv6can_create_ipv6creates_ipv6slow)_NUMERIC_ONLYAddressFormat
SocketType_SocketType	_try_sync)assert_checkpointswait_all_tasks_blocked)Callable)	TypeAlias)SocketStreamr   GaiTupleGetAddrInfoResponseGetAddrInfoArgsobjectc                
   @  sv   e Zd ZdZdddddZddd	d
d
d
d
ddddZdddd	d
d
d
d
ddddZddd	d
d
d
d
ddddZdS )MonkeypatchedGAI_orig_getaddrinfo
_responsesrecordzaCallable[[str | bytes | None, str | bytes | int | None, int, int, int, int], GetAddrInfoResponse]None)orig_getaddrinforeturnc                 C  s   || _ i | _g | _d S Nr   )selfr$    r(   Q/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/trio/_tests/test_socket.py__init__9   s    zMonkeypatchedGAI.__init__r   zstr | bytes | Nonezstr | bytes | int | Noneintr   hostportfamilytypeprotoflagsr%   c           
      C  s>   t | j}|j||||||d}|  |j}	|jr:J |	S Nr/   r0   r1   r2   )inspect	signaturer    bindapply_defaultsargskwargs)
r'   r-   r.   r/   r0   r1   r2   sigboundZfrozenboundr(   r(   r)   _frozenbindH   s    	
zMonkeypatchedGAI._frozenbindzGetAddrInfoResponse | str)responser-   r.   r/   r0   r1   r2   r%   c              
   C  s    || j | j||||||d< d S r3   )r!   r=   )r'   r>   r-   r.   r/   r0   r1   r2   r(   r(   r)   setX   s    zMonkeypatchedGAI.setc                 C  sd   |  ||||||}| j| || jv r4| j| S |tj@ rR| ||||||S td| d S )Nz%gai called with unexpected arguments )r=   r"   appendr!   stdlib_socketAI_NUMERICHOSTr    RuntimeError)r'   r-   r.   r/   r0   r1   r2   r<   r(   r(   r)   getaddrinfom   s    	


zMonkeypatchedGAI.getaddrinfoN)r   r   r   r   )r   r   r   r   )r   r   r   r   )__name__
__module____qualname__	__slots__r*   r=   r?   rD   r(   r(   r(   r)   r   6   s"               r   zpytest.MonkeyPatch)monkeypatchr%   c                 C  s   t tj}| td|j |S )NrD   )r   rA   rD   setattr)rI   
controllerr(   r(   r)   	monkeygai   s    
rL   r#   r%   c                    s   t  J t 4 I d H  W d   I d H  qB1 I d H s80    Y  W d    n1 sV0    Y  t  x ttN t 4 I d H  tW d   I d H  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ddd} t| 4 I d H  tW d   I d H  q1 I d H sz0    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 )NBaseExceptionbool)excr%   c                 S  s
   t | tS r&   )
isinstance
ValueError)rP   r(   r(   r)   _is_ValueError   s    z&test__try_sync.<locals>._is_ValueError)r   r   pytestraisesKeyErrorBlockingIOErrorrR   )rS   r(   r(   r)   test__try_sync   s     Hj22rX   c                   C  sD   t jtjksJ t jtjks J t jtjks0J t jtjks@J d S r&   )tsocket
SOL_SOCKETrA   TCP_NODELAYgaierrorntohsr(   r(   r(   r)   test_socket_has_some_reexports   s    r^   )rL   r%   c              	     sN  dddddd}t  ( tjddtjdI d H }W d    n1 sF0    Y  ||tjtjtjd	d
fg t  ( tjddtjdI d H }W d    n1 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s:J t  T ttj&}tjddddI d H  W d    n1 s|0    Y  W d    n1 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 s@0    Y  d S )Nr   r#   )gotexpectedr%   c                   s<   ddddd ddd fd	d
}|| ||ks8J d S )Nr   zatuple[AddressFamily, SocketKind, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]])gai_tupr%   c                 S  s   | \}}}}}|||fS r&   r(   )ra   r/   type__protoZ
_canonnamesockaddrr(   r(   r)   interesting_fields   s    z;test_getaddrinfo.<locals>.check.<locals>.interesting_fieldsr   zglist[tuple[AddressFamily, SocketKind, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]])gai_listr%   c                   s    fdd| D S )Nc                   s   g | ]} |qS r(   r(   ).0ra   re   r(   r)   
<listcomp>       zEtest_getaddrinfo.<locals>.check.<locals>.filtered.<locals>.<listcomp>r(   )rf   rh   r(   r)   filtered   s    	z1test_getaddrinfo.<locals>.check.<locals>.filteredr(   )r_   r`   rk   r(   rh   r)   check   s    ztest_getaddrinfo.<locals>.check	127.0.0.1Z12345r0    )rm   90  ::1)rq   rp   r   r   x   hostr.   r   r4   r-   )rs   r.   r   r   r   r   EAI_BADHINTSasdf)r   rY   rD   SOCK_STREAMAF_INETIPPROTO_TCP
SOCK_DGRAMAF_INET6IPPROTO_UDPr?   r"   rT   rU   r\   EAI_SOCKTYPEaddEAI_SERVICEhasattrru   valueerrnorC   )rL   rl   resexcinfoexpected_errnosr(   r(   r)   test_getaddrinfo   sR    662Vr   c               	     s  t jt jB } t " td| I d H }W d    n1 s:0    Y  |dksPJ t N ttj" tddI d H  W d    n1 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)rm   i  )rm   1234)z
google.comP   r   )	localhostr   rm   r   rm   80)	rA   NI_NUMERICHOSTNI_NUMERICSERVr   rY   getnameinforT   rU   r\   )Z
ni_numericr_   r-   Zservicer(   r(   r)   test_getnameinfo  s"    0NPr   c               	     s\  t  \} }t| tjrJ |  |` t| }t|tjsBJ |  | ksVJ |dI d H  |ddksxJ W d    n1 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)rE   rF   rG   r(   r(   r(   r)   MySocket<  s   r   )rA   
socketpairrQ   rY   r   from_stdlib_socketfilenosendrecvrT   rU   	TypeErrorr   )sasbtar   Zmysockr(   r(   r)   test_from_stdlib_socket.  s    
N(r   c               
     s   t  \} }t|  | j| j| j}|  |j |F | |  ksLJ |dI d H  |	ddksnJ W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr      )
rA   r   rY   fromfdr   r/   r0   r1   r   r   )r   r   r   r(   r(   r)   test_from_fdD  s    r   c                    s   ddddd} t  \}}| |d t 4 I d H .}|| | || | W d   I d H  q|1 I d H sr0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r#   sockr%   c                   s4   t d | dI d H  | dI d H dks0J d S )Nzsending hello   hr   )printr   r   )r   r(   r(   r)   childN  s    z%test_socketpair_simple.<locals>.child)rY   r   r
   open_nursery
start_soon)r   abnurseryr(   r(   r)   test_socketpair_simpleM  s    r   	fromsharezwindows only)reasonc               
     s   t rtjdkrd S t \} }|  | | t }t|}|L | 	 |	 ks\J |
dI d H  |dI d H dksJ W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nwin32r   r   )r   sysplatformrY   r   shareosgetpidr   r   r   r   )r   r   Zshareda2r(   r(   r)   test_fromshareZ  s    
r   c                    sL   t  0} t| t jsJ | jt jks*J W d    n1 s>0    Y  d S r&   )rY   r   rQ   r   r/   rx   sr(   r(   r)   test_socketi  s    
r   c                    sT   t t jt j0} t| t js"J | jt jks2J W d    n1 sF0    Y  d S r&   )rY   r   r{   rz   rQ   r   r/   r   r(   r(   r)   test_socket_v6o  s    r   linuxz
linux onlyc                    s   ddl m} m}m m tr$| |fn| f} fdd|D }|D ]~}tj | d}|j|jksfJ |j	|j	ksvJ |
  t| | }|j|jksJ |j	|j	ksJ |  |  qBd S )Nr   )rx   r{   rz   rw   c                   s&   g | ]} fD ]}t ||qqS r(   )rA   r   )rg   r/   rb   rz   rw   r(   r)   ri   |  s   z'test_sniff_sockopts.<locals>.<listcomp>r   )r   rx   r{   rz   rw   r   rY   r   r/   r0   detachr   close)rx   r{   Zfamiliessocketsr   Ztsocket_socketZtsocket_from_fdr(   r   r)   test_sniff_sockoptsv  s    r   c                    s  t  } | }|| u sJ t|  ts,J |  r8J | d |  sNJ | t jt j	d | 
t jt j	rtJ | t jt j	d | 
t jt j	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|jksJ | j|jksJ | j|jksJ |   d S )NTFrt   r   r/   r   
setsockopt)rY   r   rQ   r   r+   get_inheritableset_inheritabler   ry   r[   
getsockoptreprr   r   dirrT   rU   AttributeErrorrv   rA   r   r0   r/   r1   )r   Zcm_enter_valuefdZstdlib_sockr(   r(   r)   test_SocketType_basics  s@    
2
2&
r   c                    s8   t  } | }t|  W d    n1 s*0    Y  d S r&   )rY   r   setsockopt_tests)r   _r(   r(   r)   test_SocketType_setsockopt  s    r   zSocketType | SocketStreamr   c              
   C  s   t tdr\z| tjtjdd W n8 tyZ } z |jdtjfv sFJ W Y d}~n
d}~0 0 | tjtj	d t
jtdd$ | tjtj	dd W d   n1 s0    Y  t
jtdd" | tjtj	d W d   n1 s0    Y  dS )	z6Extract these out, to be reused for SocketStream also.SO_BINDTODEVICENr   *   Fz"invalid value for argument 'value'match   )r   rY   r   rZ   r   OSErrorr   EPERMry   r[   rT   rU   r   )r   er(   r(   r)   r     s    
 2r   c               
     s   t  \} }|  | |  }|d t|t js6J | |  ksJJ |   |dI d H  |dI d H dkszJ W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S Nr   r   )	rY   r   duprQ   r   r   r   r   r   )r   r   r   r(   r(   r)   test_SocketType_dup  s    r   c               	     s  t  \} }|  | | dI d H  |dI d H dks@J | jrJJ |jrTJ | t j | jsjJ |jrtJ |dI d H dk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 )Nr   r   rj      y)	rY   r   r   r   Zdid_shutdown_SHUT_WRshutdownSHUT_WRSHUT_RD	SHUT_RDWRr   r   r(   r(   r)   test_SocketType_shutdown  s,    



TLr   )addresssocket_typerm   rq   )Zmarksstrr   )r   r   r%   c                   sb  t |}t |}|2 |
 || dfI d H  |d | d d }t 4 I d H 6}||j| |	 I d H \}}W d   I d H  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	   r   r   )rY   r   r7   listengetsocknamer
   r   r   connectacceptgetpeernamer   r   )r   r   listenerclientaddrr   serverclient_addrr(   r(   r)   test_SocketType_simple_server  s    


<"r   c               	     s   t  \} }|  |l |  r$J |dI d H  t| I d H  |  sPJ | dI d H dkshJ |  rtJ W d    n1 s0    Y  W d    n1 s0    Y  d S r   )rY   r   Zis_readabler   r
   wait_readabler   r   r(   r(   r)   test_SocketType_is_readable4  s    r   rO   c                   C  s6   zt jddt jd W n t jy,   Y dS 0 dS d S )N1.2.3.4r   r/   FT)rA   rD   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)rE   rF   rG   __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.255)r   r   r%   c           
        s  | t jkdddfddddddfdd}t j| d	ttsRJ d
D ]x}j|dfddI d H }t|ttfrJ |||jdf j|dfddI d H }t|ttfrJ |||j	df qVdD ] ddd fdd}|||j
dfI d H |j
df r||dI d H d ||dI d H d ||dI d H d ||dI d H d ||dI d H d ||dI d H d ||dI d H d ||dI d H d ||dI d H d ||dI d H d t jt jd ||d I d H d! ||d"I d H |jd#f rt st jt jd tt j}|d$I d H  W d    n1 sp0    Y  t jt jh}tt d%r|t j |jj|v sJ zt jt jt jd&}W n ttfy   Y n80 t|tsJ |jd' dI d H d'ksJ |  d(}	tjt|	d) |d*I d H  W d    n1 sN0    Y  tjt|	d) |d+I d H  W d    n1 s0    Y  tjt|	d)4 r|d,I d H  n|d-I d H  W d    q1 s0    Y  qW d    n1 s0    Y  d S ).Nztuple[str | int, ...])r   r%   c                   s    rt | dk r| d7 } q| S )N   )r   )len)r   )v6r(   r)   pado  s    
z$test_SocketType_resolve.<locals>.padr#   )actualr`   r%   c                   s    | | ksJ d S r&   r(   )r   r`   )r   r(   r)   	assert_equ  s    z*test_SocketType_resolve.<locals>.assert_eqr   Nro   r   TlocalF)FTztuple[str, int] | tuple[str, int, int] | tuple[str, int, int, int] | tuple[str, str] | tuple[str, str, int] | tuple[str, str, int, int])r9   r%   c                   s,   j |  dI d H }t|ts"J td|S )Nr  ztuple[Union[str, int], ...])_resolve_address_nocprQ   tupler   )r9   r   )r  r   r(   r)   r     s    
z$test_SocketType_resolve.<locals>.reshttp)r   r   )r   r   r   r   )r   r   r   )r   r   r   )r   r   r   r   )r   r   r   r	   )r   r   )r   r   r   )r   r   r   r   )r   r   r   )r   r   r   r	   )r   r  )z::ffff:1.2.3.4r   )z<broadcast>{   r  )r   r   EAI_ADDRFAMILY)r/   r0   rv   H^address should be a \(host, port(, \[flowinfo, \[scopeid\]\])*\) tuple$r   r   )r   )r   r   r   r   r   )r   r   r   r   ) rY   r{   r   rQ   r   r  r   bytesr   r   r   r   IPPROTO_IPV6IPV6_V6ONLYr   r   rT   rU   r\   
EAI_NONAME
EAI_NODATAr   r~   r  r   r   
AF_NETLINKrz   r   r   r   rR   )
r   r   r   nullr_   r   r   r   Znetlink_sockr   r(   )r  r   r   r   r)   test_SocketType_resolveT  s|    

 .
..r  c               	     s  t  } | dI d H  |  d dks.J | d t  @}|d|  d fI d H  | |  ksrJ W d    n1 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)r   r   r   rm   
   r   r   )z1.2:3rt   )
rY   r   r7   r   r   r   r   rT   rU   r\   )r   Zsock2r(   r(   r)    test_SocketType_unresolved_names  s    


P
r  c                    s^  t  \} }| 6 | t|  |d |d t z}|  t	 L t
tj   dI d H  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  t	 (  dI d H dksJ W d    n1 s0    Y  t	 L t
t   dI d H  W d    n1 sF0    Y  W d    n1 sf0    Y  dd fdd}t 4 I d H 8}|| t I d H  |d	 W d   I d H  q1 I d H s0    Y  dd fd
d}t 4 I d H 8}|| t I d H  |j  W d   I d H  qT1 I d H sJ0    Y  t|dd fdd}dd fdd}t 4 I d H l}|| || t I d H  | d |d t I d H  | d |d W d   I d H  q1 I d H s0    Y  W d    n1 s00    Y  W d    n1 sP0    Y  d S )NF   1r  Zhahar#   rM   c                     sB   t  (  dI d H dks J W d    n1 s40    Y  d S )Nr     2r   r   r(   r   r(   r)   do_successful_blocking_recv  s    zGtest_SocketType_non_blocking_paths.<locals>.do_successful_blocking_recvr  c                	     sf   t  L ttj   dI d H  W d    n1 s:0    Y  W d    n1 sX0    Y  d S )Nr  )r   rT   rU   r
   	Cancelledr   r(   r  r(   r)   do_cancelled_blocking_recv  s    zFtest_SocketType_non_blocking_paths.<locals>.do_cancelled_blocking_recvc                     s   t  (  dI d H dks J W d    n1 s40    Y  t  ( dI d H dks^J W d    n1 sr0    Y  d S )Nr      a   br  r(   r   tbr(   r)   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 )Nr   r  r  r  r(   r  r(   r)   t25  s    6z.test_SocketType_non_blocking_paths.<locals>.t2r  r  )rA   r   rY   r   setblockingr   r
   CancelScopecancelr   rT   rU   r  r   r   r   r   r   cancel_scope)r   r   Zcscoper  r   r  r  r  r(   r  r)   "test_SocketType_non_blocking_paths  sJ    



j8P
8
8





r$  c                    s  t  Ntjtdd  dI d H  W d    n1 s>0    Y  W d    n1 s\0    Y  t  |t T    ttj	  dI d H  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  t 4 t  t  } | 
dI d H  |   G  fdddtj}tts\J j  | _t R ttj	$ |  I d H  W d    n1 s0    Y  W d    n1 s0    Y   dksJ W d    n1 s 0    Y  W d    n1 s 0    Y  W d    n1 s@0    Y  t  Ptjtd	d  d
I d H  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr  r   r   r   rm   r   c                      s"   e Zd Zddd fddZdS )z3test_SocketType_connect_paths.<locals>.CancelSocketr   r#   )r   r%   c                   sB   t tsJ    t|  | j| j_j	| t
d S r&   )rQ   r   r"  rA   r   r   r/   r0   _sockr   rW   )r'   r   r#  r   r(   r)   r   b  s    z;test_SocketType_connect_paths.<locals>.CancelSocket.connectN)rE   rF   rG   r   r(   r'  r(   r)   CancelSocketa  s   r(  rt   z^^\[\w+ \d+\] Error connecting to \('127\.0\.0\.\d', \d+\): (Connection refused|Unknown error)$)rm   r	   )rY   r   rT   rU   rR   r   r
   r!  r"  r  r7   r   rA   rQ   r   r&  r   r   r   r   r   )r   r(  r(   r'  r)   test_SocketType_connect_pathsG  s:    
L

j
Tr
r)  c               	     sz   d} t  Z}tjtd| dd$ || dfI d H  W d    n1 sN0    Y  W d    n1 sl0    Y  d S )Nrm   z#^\[\w+ \d+\] Error connecting to \(z*, 2\): (Connection refused|Unknown error)$r   r	   )rY   r   rT   rU   r   r   )r   r   r(   r(   r)   test_address_in_socket_error  s    

r*  c                    s   t  ԉ t } dddd fdd}t| ts8J || _t L t	t j
  | dI d H  W d    n1 sx0    Y  W d    n1 s0    Y  |  dksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )	Nr   rO   r#   )r   r  r%   c                  s.   | dksJ |rJ     t I d H  d S r   )r"  r
   
checkpoint)r   r  r#  r(   r)   r    s    zVtest_resolve_address_exception_in_connect_closes_socket.<locals>._resolve_address_nocpro   rt   )r
   r!  rY   r   rQ   r   r  r   rT   rU   r  r   r   )r   r  r(   r,  r)   7test_resolve_address_exception_in_connect_closes_socket  s    


Lr-  c               	     s~  t  \} }|  | | dI d H dks0J |dt jI d H dksLJ |dI d H dksdJ | dI d H  td}||I d H  |dk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 )Nr   r   r  s
   x         sendmsgs   xxxr   rn   r%  r   MSG_MOREs   yyys   zzzs	   xxxyyyzzzs
   xxx       recvmsgr   recvmsg_intos   xyzwr   r	   s   xys   zw s   yzs   xyz)rY   r   r   r   MSG_PEEK	bytearray	recv_intor   r.  r   rz   r7   r   sendtorecvfromr/  recvfrom_intor0  r1  r   )r   r   buftargetstargetdatar   nbytesancdataZ	msg_flagsZbuf1Zbuf2retr(   r(   r)   test_send_recv_variants  s    
V
   $fr?  c                   s   |  ddd | j dddtd | j dddtd |  dd	d |  dd
d tddI d H dkshJ tddI d H dksJ tddI d H dksJ td
dI d H dksJ tddI d H dksJ d S )Nu
   ok faß.des   xn--fa-hia.der   zok ::1rq   )r2   s   ::1badzfass.dezxn--fa-hia.deu   faß.de)r?   r   rY   rD   )rL   r(   r(   r)   	test_idna  s    rA  c                     s4   t dI d H dksJ t dI d H dks0J d S )NZudp   Ztcp   )rY   getprotobynamer(   r(   r(   r)   test_getprotobyname'  s    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 ]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                   @  s8   e Zd ZddddddddddZdddd	d
dZdS )z5test_custom_hostname_resolver.<locals>.CustomResolverr   r+   z(tuple[str, str, str, int, int, int, int]r,   c                   s   d||||||fS )N
custom_gair(   )r'   r-   r.   r/   r0   r1   r2   r(   r(   r)   rD   1  s    	zAtest_custom_hostname_resolver.<locals>.CustomResolver.getaddrinfoz+tuple[str, int] | tuple[str, int, int, int]z<tuple[str, tuple[str, int] | tuple[str, int, int, int], int])rd   r2   r%   c                   s
   d||fS )N
custom_gnir(   )r'   rd   r2   r(   r(   r)   r   <  s    zAtest_custom_hostname_resolver.<locals>.CustomResolver.getnameinfoN)rE   rF   rG   rD   r   r(   r(   r(   r)   CustomResolver0  s   rH  r   r   foorF  s	   localhostu   föö)rF  s
   xn--f-1gaarI  r   r   r   r   r   )rG  r   r   rr   rs   r.   r4   r-   )	rY   Zset_custom_hostname_resolverrx   rw   ry   AI_CANONNAMErD   r   r?   )rL   rH  crvalsr_   r`   r(   r(   r)   test_custom_hostname_resolver.  s,    rM  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dddddZdS )	z7test_custom_socket_factory.<locals>.CustomSocketFactoryr   r   r+   z*tuple[str, AddressFamily, SocketKind, int])r/   r0   r1   r%   c                 S  s   d|||fS )Nhir(   )r'   r/   r0   r1   r(   r(   r)   r   m  s    z>test_custom_socket_factory.<locals>.CustomSocketFactory.socketN)rE   rF   rG   r   r(   r(   r(   r)   CustomSocketFactoryl  s   rO  rN  r   r   r	   r   )rN  r   r	   r   r   r7   )
rY   Zset_custom_socket_factoryr   rx   rw   rA   r   r   r   r   )rO  Zcsfr   wrappedr   r   r(   r(   r)   test_custom_socket_factoryk  s    	JrQ  c                   C  s6   t t t  W d    n1 s(0    Y  d S r&   )rT   rU   r   rY   r   r(   r(   r(   r)   test_SocketType_is_abstract  s    rR  AF_UNIXzno unix domain socketsc                    s   ddddd} t  V}| | dI d H  | t| dI d H  | t| dI d H  W d    n1 st0    Y  z*td	 d
}| d| I d H  W n ty   Y n0 d S )Nzstr | bytes | os.PathLike[str]r#   )pathr%   c              
     s   t jt jd}|| I d H  |d t jt jd~}|| I d H  | I d H \}}|8 |dI d H  |dI d H dksJ W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r  r   r   )	rY   r   rS  r7   r   r   r   r   r   )rT  lsockcsockssockr   r(   r(   r)   check_AF_UNIX  s    
z.test_unix_domain_socket.<locals>.check_AF_UNIXz/sockz/sock1z/sock2r   asciis    trio-test-)	tempfileTemporaryDirectoryr   r   fsencodeurandomhexencodeFileNotFoundError)rX  Ztmpdircookier(   r(   r)   test_unix_domain_socket  s    
8rb  c                    s$  t  \} }|  | | d dd z|  q,W n tyL   Y n0 t|  dd fdd}dd fdd	}t 4 I d H >}|	| |	| t
 I d H     W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )
NFr   i r#   rM   c                     s@   t tj   I d H  W d    n1 s20    Y  d S r&   )rT   rU   r
   ClosedResourceErrorr   r(   r   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 )Nr   )rT   rU   r
   rc  r   r(   )r   r(   r)   receiver  s    z+test_interrupted_by_close.<locals>.receiver)rA   r   r   r   rW   rY   r   r
   r   r   r   r   )Za_stdlibZb_stdlibre  rf  r   r(   rd  r)   test_interrupted_by_close  s     



rg  c                    s  d} g }t d| dD ]z}zt \}}W nX ty } z@|jtjtjfv sNJ td| d W Y d }~ 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 S )Ni  r   r	   zUnable to open more than z	 sockets.)rangerA   r   r   r   EMFILEENFILEr   r
   r   r   r   r   r#  r"  r   )totalr   Zopenedr   r   rP   r   r   r(   r(   r)   test_many_sockets  s"    $4rl  )c
__future__r   r   r5   r   r   rA   r   rZ  pathlibr   r   r   typingr   r   r   attrsrT   ro   r
   rY   Z_core._tests.tutilr   r   r   r   _socketr   r   r   r   r   testingr   r   collections.abcr   Ztyping_extensionsr   Z_highlevel_socketr   r  r+   r   r	  r   r   listr   r   r   r   ZfixturerL   rX   r^   r   r   r   r   r   markZskipifr   r   r   r   r   r   r   r   r   r   r   Zparametrizerx   paramr{   r   r   r   Zdefiner   r  r  r$  r)  r*  r-  r?  rA  rE  rM  rQ  rR  rb  rg  rl  r(   r(   r(   r)   <module>   s   (	JZ#	!3!	
	}KI`=  