
    g                    V   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mZ d dlm	Z	m
Z
 d dlmZmZmZmZmZmZ d dlZd dlZd dlmZ ddlmZ er.d d	lmZmZmZ d d
lmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(  e#d      Z) ed      Z*eZ+de,d<    G d d      Z- ej\                  d      Z/de,d<    ej\                  d      Z0de,d<   	 	 	 	 d5dZ1	 	 	 	 d6dZ2ejf                  ejh                  z  Z5	 	 	 	 d7	 	 	 	 	 	 	 	 	 	 	 	 	 d8dZ6	 	 	 	 	 	 d9dZ7d:dZ8d;dZ9 eejt                  d d !      ejv                  ejx                  d f	 	 	 	 	 	 	 	 	 d<d"       Z:ejz                  d#k(  ses% e>ed$      r eej~                  d d !      d=d%       Z?ejz                  d#k(  re@ZAde,d&<   e@ZBde,d'<   ejv                  ZCn*dZCd(e,d)<   ee@e	df   ZAde,d&<   eej                  e@f   ZBde,d'<    eej                  d d !      eCe
jx                  d f	 	 	 	 	 	 	 d>d*       ZD eej                  d d !      ejv                  ejx                  d df	 	 	 	 	 	 	 	 	 d?d+       Z	 	 	 	 	 	 	 	 	 	 d@d,ZE eFed-d        eFed.d       z   ZG	 dA	 	 	 	 	 	 	 dBd/ZH	 	 	 	 	 	 	 	 	 	 	 	 	 	 dCd0ZI G d1 d      ZJeJj                  j                         D ]m  \  ZMZNeMj                  d2      seNj                  r$ej                  ej                  fD ]  ZQ eFeQeMd      ZReRseRj                  s n ]eRj                  eN_P        o  G d3 d4eJ      ZSy)D    )annotationsN)index)AddressFamily
SocketKind)TYPE_CHECKINGAnySupportsIndexTypeVarUnionoverload)wraps   )_core)	AwaitableCallableIterable)TracebackType)BufferConcatenate	ParamSpecSelf	TypeAlias)HostnameResolverSocketFactoryPTr   AddressFormatc                  F    e Zd Z	 d	 	 	 ddZddZd	dZ	 	 	 	 	 	 	 	 d
dZy)	_try_syncNc                    || _         y N)_blocking_exc_override)selfblocking_exc_overrides     ?/var/www/html/venv/lib/python3.12/site-packages/trio/_socket.py__init__z_try_sync.__init__>   s     '<#    c                \    | j                   t        |t              S | j                  |      S r!   )r"   
isinstanceBlockingIOError)r#   excs     r%   _is_blocking_io_errorz_try_sync._is_blocking_io_errorD   s,    &&.c?33..s33r'   c                \   K   t         j                  j                          d {    y 7 wr!   )triolowlevelcheckpoint_if_cancelledr#   s    r%   
__aenter__z_try_sync.__aenter__J   s     mm33555s   ",*,c                   K   || j                  |      ryt        j                  j                          d {    y7 w)NTF)r,   r.   r/   cancel_shielded_checkpointr#   exc_type	exc_value	tracebacks       r%   	__aexit__z_try_sync.__aexit__M   s>       T%?%?	%J --::<<< =s   6A >A r!   )r$   z&Callable[[BaseException], bool] | NonereturnNoner+   BaseExceptionr:   boolr:   r;   )r6   type[BaseException] | Noner7   BaseException | Noner8   TracebackType | Noner:   r>   )__name__
__module____qualname__r&   r,   r2   r9    r'   r%   r   r   =   sU     IM<E< 
<46, ( (	
 
r'   r   hostname_resolverz%_core.RunVar[HostnameResolver | None]	_resolversocket_factoryz"_core.RunVar[SocketFactory | None]_socket_factoryc                Z    t         j                  d      }t         j                  |        |S )a\  Set a custom hostname resolver.

    By default, Trio's :func:`getaddrinfo` and :func:`getnameinfo` functions
    use the standard system resolver functions. This function allows you to
    customize that behavior. The main intended use case is for testing, but it
    might also be useful for using third-party resolvers like `c-ares
    <https://c-ares.haxx.se/>`__ (though be warned that these rarely make
    perfect drop-in replacements for the system resolver). See
    :class:`trio.abc.HostnameResolver` for more details.

    Setting a custom hostname resolver affects all future calls to
    :func:`getaddrinfo` and :func:`getnameinfo` within the enclosing call to
    :func:`trio.run`. All other hostname resolution in Trio is implemented in
    terms of these functions.

    Generally you should call this function just once, right at the beginning
    of your program.

    Args:
      hostname_resolver (trio.abc.HostnameResolver or None): The new custom
          hostname resolver, or None to restore the default behavior.

    Returns:
      The previous hostname resolver (which may be None).

    N)rH   getset)rG   olds     r%   set_custom_hostname_resolverrO   e   s$    : --
CMM#$Jr'   c                Z    t         j                  d      }t         j                  |        |S )a  Set a custom socket object factory.

    This function allows you to replace Trio's normal socket class with a
    custom class. This is very useful for testing, and probably a bad idea in
    any other circumstance. See :class:`trio.abc.HostnameResolver` for more
    details.

    Setting a custom socket factory affects all future calls to :func:`socket`
    within the enclosing call to :func:`trio.run`.

    Generally you should call this function just once, right at the beginning
    of your program.

    Args:
      socket_factory (trio.abc.SocketFactory or None): The new custom
          socket factory, or None to restore the default behavior.

    Returns:
      The previous socket factory (which may be None).

    N)rJ   rL   rM   )rI   rN   s     r%   set_custom_socket_factoryrQ      s'    0 

d
#C'Jr'   c           
     J  K   dd}t        |      4 d{    t        j                  | |||||t        z        cddd      d{    S 7 67 # 1 d{  7  sw Y   nxY wt	        | t
              r9	 | j                  d      } n&# t        $ r t        j                  | d      } Y nw xY wt        j                  d      }||j                  | |||||       d{  7  S t        j                  j                  t        j                  | |||||d       d{  7  S w)aT  Look up a numeric address given a name.

    Arguments and return values are identical to :func:`socket.getaddrinfo`,
    except that this version is async.

    Also, :func:`trio.socket.getaddrinfo` correctly uses IDNA 2008 to process
    non-ASCII domain names. (:func:`socket.getaddrinfo` uses IDNA 2003, which
    can give the wrong result in some cases and cause you to connect to a
    different host than the one you intended; see `bpo-17305
    <https://bugs.python.org/issue17305>`__.)

    This function's behavior can be customized using
    :func:`set_custom_hostname_resolver`.

    c                t    t        | t        j                        xr | j                  t        j                  k(  S r!   )r)   _stdlib_socketgaierrorerrno
EAI_NONAME)r+   s    r%   numeric_only_failurez)getaddrinfo.<locals>.numeric_only_failure   s.    sN334 7		^666	
r'   NasciiT)uts46abandon_on_cancelr<   )r   rT   getaddrinfo_NUMERIC_ONLYr)   strencodeUnicodeEncodeError_idnarH   rL   r.   	to_threadrun_sync)hostportfamilytypeprotoflagsrX   hrs           r%   r]   r]      s$    H
 -. 
 
))M!

 
 
 
 
 
 
" $	2;;w'D! 	2 <<D1D		2
 
t	B	~^^D$eUKKKK^^,,&&" - 	
 	
 	
 		
s   D#AD#!AD#AD#D#A#AA#D#7B	 D#	 B,)D#+B,,3D#C" =D#D D#c                   K   t         j                  d      }||j                  | |       d{   S t        j                  j                  t        j                  | |d       d{   S 7 =7 w)a  Look up a name given a numeric address.

    Arguments and return values are identical to :func:`socket.getnameinfo`,
    except that this version is async.

    This function's behavior can be customized using
    :func:`set_custom_hostname_resolver`.

    NTr[   )rH   rL   getnameinfor.   rc   rd   rT   )sockaddrrj   rk   s      r%   rm   rm      sm      
t	B	~^^He444^^,,&&"	 - 
 
 	
 5
s!   -A1A-8A1(A/)A1/A1c                ~   K   t         j                  j                  t        j                  | d       d{   S 7 w)zkLook up a protocol number by name. (Rarely used.)

    Like :func:`socket.getprotobyname`, but async.

    Tr[   N)r.   rc   rd   rT   getprotobyname)names    r%   rp   rp     s=      ((%% )    s   4=;=
SocketTypec                    t        |       S )z]Convert a standard library :class:`socket.socket` object into a Trio
    socket object.

    )_SocketType)socks    r%   from_stdlib_socketrv   -  s    
 tr'   rF   assignedupdatedc                z    t        |||t        |             \  }}}t        t        j                  | |||            S )z=Like :func:`socket.fromfd`, but returns a Trio socket object.)_sniff_sockopts_for_filenor   rv   rT   fromfd)fdrg   rh   ri   type_s        r%   r|   r|   5  s<     6fdE5QS9UFE5n33BuMNNr'   win32	fromsharec                >    t        t        j                  |             S )z@Like :func:`socket.fromshare`, but returns a Trio socket object.)rv   rT   r   )infos    r%   r   r   E  s     ".":":4"@AAr'   FamilyTTypeTr;   FamilyDefaultc                b    t        j                  | ||      \  }}t        |      t        |      fS )zTLike :func:`socket.socketpair`, but returns a pair of Trio socket
    objects.

    )rT   
socketpairrv   )rg   rh   ri   leftrights        r%   r   r   U  s2     !++FD%@KD%t$&8&?@@r'   c                    |*t         j                  d      }|%|j                  | ||      S t        | |||      \  } }}t	        j                  | |||      }t        |      S )zCreate a new Trio socket, like :class:`socket.socket`.

    This function's behavior can be customized using
    :func:`set_custom_socket_factory`.

    N)rJ   rL   socketr{   rT   rv   )rg   rh   ri   filenosfstdlib_sockets         r%   r   r   c  sq     ~  &>99VT5118	
e #))&$vFMm,,r'   c                >   t         j                  dk7  r| ||fS ddlm}m}m}m} t        j                  | |||      }	 |j                  ||      } |j                  ||      }|j                  ||      }|j                          | ||fS # |j                          w xY w)zCCorrect SOCKOPTS for given fileno, falling back to provided values.linuxr   )	SO_DOMAINSO_PROTOCOLSO_TYPE
SOL_SOCKET)r   )
sysplatformr   r   r   r   r   rT   
getsockoptdetach)	rg   r~   ri   r   r   r   r   r   sockobjs	            r%   r{   r{     s     ||wue##  ##FE5HG##J	:"":{;"":w7 	5% 	s   6B
 
BSOCK_NONBLOCKSOCK_CLOEXECc                     t         dd      d	 fd       }d j                   d|_        |r#|xj                  d j                   dz  c_        |S )
N)rC   rF   rw   c                N   K    | j                   g|i | d {   S 7 wr!   )_nonblocking_helper)r#   argskwargsfnwait_fns      r%   wrapperz1_make_simple_sock_method_wrapper.<locals>.wrapper  s,     -T--grKDKFKKKKs   %#%zLike :meth:`socket.socket.z`, but async.

            z7Only available on platforms where :meth:`socket.socket.z` is available.)r#   rt   r   P.argsr   P.kwargsr:   r   )_wrapsrC   __doc__)r   r   maybe_availr   s   ``  r%    _make_simple_sock_method_wrapperr     sn    
 B3L 4L 5R[[M B GO Ebkk] S 	
 Nr'   c               4  K   |t         j                  k(  r)t        |t              rt	        |      dk(  st        d      |t         j                  k(  r;t        |t              r dt	        |      cxk  rdk  sxt        d       t        d      t        t         d      rO|t         j                  k(  r<t        |t        t        t        j                  f      sJ t        j                  |      S |S |^}}}t        |t              r|	 t        j                  ||       |S |dk(  rd }|dk(  rd}d	}	|r|	t         j$                  z  }	|t         j                  k(  r|s|	t         j&                  z  }	t)        |||| ||	       d {   }
t	        |
      d
k\  sJ |
^^ }}}|t         j                  k(  rRt+        |      }t	        |      dk(  sJ t	        |      dk\  r|d   |d<   t	        |      dk\  r|d   |d<   t        |      S |S # t         t"        f$ r Y w xY w7 w)N   z&address should be a (host, port) tuple   z=address should be a (host, port, [flowinfo, [scopeid]]) tupleAF_UNIX z<broadcast>z255.255.255.255r   r      )rT   AF_INETr)   tuplelen
ValueErrorAF_INET6hasattrr   r_   bytesosPathLikefspathint	inet_ptonOSError	TypeError
AI_PASSIVEAI_V4MAPPEDr]   list)r~   rg   ri   ipv6_v6onlyaddresslocalre   rf   _rj   gai_resnormedlist_normeds                r%   _resolve_address_nocpr     s      ''''5)W1BEFF	>**	*'5)c'l1Ga1GO  2HO  
	+.:P:P0P'C#<===yy!! ND$ $!1	$$VT2 Nrz} E*** (((+++dFE5%HHG w<1La1 (((6l6{aw<1$QZKNw<1$QZKN[!!MK # 		* Is8   DHH A"H>H?BHHHHHc                  B    e Zd Zd2 fdZd3dZd3dZd4dZd4dZed5d       Z	ed6d       Z		 d7	 	 	 	 	 	 	 d8dZ	ed9d	       Z
e	 	 	 	 	 	 	 	 	 	 d:d
       Z
	 d7	 	 	 	 	 	 	 	 	 d;dZ
 eej                  d      fd<dZd=dZd>dZej$                  dk(  ses eej*                  d      rd?dZd@dZ	 	 	 	 	 	 	 	 dAdZedBd       ZedCd       Zed3d       Zed=d       ZdDdZdEdZd2dZ dFdZ!dGdZ"d=dZ#d2dZ$dHd Z%dFd!Z&dIdJd"Z'	 	 dK	 	 	 	 	 	 	 dLd#Z(	 dI	 	 	 	 	 dMd$Z)	 	 dK	 	 	 	 	 	 	 dNd%Z*ej$                  dk7  ses! eej*                  d&      r	 	 dK	 	 	 	 	 	 	 dOd'Z+ej$                  dk7  ses! eej*                  d(      r	 	 dK	 	 	 	 	 	 	 dPd)Z,dIdQd*Z-e	 	 	 	 	 	 dRd+       Z.e	 	 	 	 	 	 	 	 dSd,       Z.dTd-Z.ej$                  dk7  sesN eej*                  d.      r7 e/ej*                  j`                  d/d/0      	 	 	 dU	 	 	 	 	 	 	 	 	 dVd1       Z0 xZ1S  xZ1S  xZ1S )Wrr   c                Z    t         |           t        |       t        u rt	        d      y )Nz`SocketType is an abstract class; use trio.socket.socket if you want to construct a socket object)superr&   rh   rr   r   )r#   	__class__s    r%   r&   zSocketType.__init__   s1    :#4  $r'   c                    t         r!   NotImplementedErrorr1   s    r%   r   zSocketType.detach*      !!r'   c                    t         r!   r   r1   s    r%   r   zSocketType.fileno-  r   r'   c                    t         r!   r   r1   s    r%   getpeernamezSocketType.getpeername0  r   r'   c                    t         r!   r   r1   s    r%   getsocknamezSocketType.getsockname3  r   r'   c                     y r!   rF   r#   leveloptnames      r%   r   zSocketType.getsockopt6      ;>r'   c                     y r!   rF   r#   r   r   buflens       r%   r   zSocketType.getsockopt9      JMr'   c                    t         r!   r   r   s       r%   r   zSocketType.getsockopt<  
     "!r'   c                     y r!   rF   r#   r   r   values       r%   
setsockoptzSocketType.setsockoptD      QTr'   c                     y r!   rF   r#   r   r   r   optlens        r%   r   zSocketType.setsockoptG       r'   c                    t         r!   r   r   s        r%   r   zSocketType.setsockoptP  s
     "!r'      c                    t         r!   r   r#   backlogs     r%   listenzSocketType.listenY  r   r'   c                    t         r!   r   r1   s    r%   get_inheritablezSocketType.get_inheritable\  r   r'   c                    t         r!   r   r#   inheritables     r%   set_inheritablezSocketType.set_inheritable_  r   r'   r   sharec                    t         r!   r   r#   
process_ids     r%   r   zSocketType.sharef  s    %%r'   c                    t         r!   r   r1   s    r%   	__enter__zSocketType.__enter__i  r   r'   c                    t         r!   r   r5   s       r%   __exit__zSocketType.__exit__l  r   r'   c                    t         r!   r   r1   s    r%   rg   zSocketType.familyt      !!r'   c                    t         r!   r   r1   s    r%   rh   zSocketType.typex  r   r'   c                    t         r!   r   r1   s    r%   ri   zSocketType.proto|  r   r'   c                    t         )zBReturn True if the socket has been shut down with the SHUT_WR flagr   r1   s    r%   did_shutdown_SHUT_WRzSocketType.did_shutdown_SHUT_WR  s
     "!r'   c                    t         r!   r   r1   s    r%   __repr__zSocketType.__repr__  r   r'   c                    t         r!   r   r1   s    r%   dupzSocketType.dup  r   r'   c                    t         r!   r   r1   s    r%   closezSocketType.close  r   r'   c                   K   t         wr!   r   r#   r   s     r%   bindzSocketType.bind       !!   	c                    t         r!   r   r#   flags     r%   shutdownzSocketType.shutdown  r   r'   c                    t         )zpReturn True if the socket is readable. This is checked with `select.select` on Windows, otherwise `select.poll`.r   r1   s    r%   is_readablezSocketType.is_readable  r   r'   c                   K   t         w)zIConvenience method that calls trio.lowlevel.wait_writable for the object.r   r1   s    r%   wait_writablezSocketType.wait_writable  s     !!r  c                   K   t         wr!   r   r1   s    r%   acceptzSocketType.accept  r  r  c                   K   t         wr!   r   r  s     r%   connectzSocketType.connect  r  r  c                   t         r!   r   r#   r   rj   s      r%   recvzSocketType.recv  r   r'   c                    t         r!   r   r#   buffernbytesrj   s       r%   	recv_intozSocketType.recv_into  r   r'   c                   t         r!   r   r#   bufsizerj   s      r%   recvfromzSocketType.recvfrom  r   r'   c                    t         r!   r   r  s       r%   recvfrom_intozSocketType.recvfrom_into  r   r'   recvmsgc                   t         r!   r   r#   r%  
ancbufsizerj   s       r%   r)  zSocketType.recvmsg  
     &%r'   recvmsg_intoc                   t         r!   r   r#   buffersr,  rj   s       r%   r.  zSocketType.recvmsg_into  r-  r'   c                   t         r!   r   r#   r   rj   s      r%   sendzSocketType.send  r   r'   c                  K   y wr!   rF   r#   datar   s      r%   sendtozSocketType.sendto           c                  K   y wr!   rF   r#   r7  rj   r   s       r%   r8  zSocketType.sendto        r:  c                   K   t         wr!   r   )r#   r   s     r%   r8  zSocketType.sendto  r  r  sendmsgrF   rw   c                  K   t         wr!   r   r#   r1  ancdatarj   r   s        r%   r?  zSocketType.sendmsg  s      &%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   
int | Noner:   zint | bytesr   r   r   r   r   zint | Bufferr:   r;   
r   r   r   r   r   r;   r   r   r:   r;   
r   r   r   r   r   zint | Buffer | Noner   rH  r:   r;   r   r   r:   r;   r:   r>   r   r>   r:   r;   r   r   r:   r   r:   r   r6   r@   r7   rA   r8   rB   r:   r;   r:   r   r:   r   r:   r_   r:   rr   r   r   r:   r;   r  r   r:   r;   r:   z tuple[SocketType, AddressFormat]r   r   r   rj   r   r:   zAwaitable[bytes]r   r   r   r   r!  r   rj   r   r:   Awaitable[int]r%  r   rj   r   r:   z&Awaitable[tuple[bytes, AddressFormat]]r   r   r!  r   rj   r   r:   z$Awaitable[tuple[int, AddressFormat]]r%  r   r,  r   rj   r   r:   zBAwaitable[tuple[bytes, list[tuple[int, int, bytes]], int, object]]r1  Iterable[Buffer]r,  r   rj   r   r:   z@Awaitable[tuple[int, list[tuple[int, int, bytes]], int, object]]r   r   rj   r   r:   r]  r7  r   r   !tuple[object, ...] | str | Bufferr:   r   r7  r   rj   r   r   re  r:   r   r   objectr:   r   rF   r   N
r1  rb  rB  z!Iterable[tuple[int, int, Buffer]]rj   r   r   zAddressFormat | Noner:   r   )2rC   rD   rE   r&   r   r   r   r   r   r   r   minrT   	SOMAXCONNr   r   r   r   r   r   r   r   r   r   r   propertyrg   rh   ri   r  r  r  r	  r  r  r  r  r  r  r  r"  r&  r(  r)  r.  r4  r8  r   r?  __classcell__)r   s   @r%   rr   rr     s#   """" > >M M "	"" " 	"
 
" T T  	
  
  """ " #	"
 " 
" %((@(@#$F """ ||wgn&;&;WE	&""," (" (	"
 
" " " " " " " " """"""""""" 	"" " 	"
 
" "" "
 
0" 	"" " 	"
 
." ||wgn&;&;YG  		&	& 	& 		& P	& ||wgn&;&;^L  		&%	& 	& 		& N	&"  3
 
    3	 
 " ||wgn&;&;YG 
%%--B	G :<,0	&%	& 7	& 		&
 *	& 	& 
H	&	 HMr'   __c                  2   e Zd Zd7dZd8dZd8dZd9dZd9dZed:d       Z	ed;d       Z		 d<	 	 	 	 	 	 	 d=d	Z	ed>d
       Z
e	 	 	 	 	 	 	 	 	 	 d?d       Z
	 d<	 	 	 	 	 	 	 	 	 d@dZ
 eej                  d      fdAdZdBdZdCdZej$                  dk(  ses eej*                  d      rdDdZdEdZ	 	 	 	 	 	 	 	 dFdZedGd       ZedHd       Zed8d       ZedBd       ZdIdZdJdZdKdZ dLdZ!dMdZ"dBdZ#dKd Z$	 	 	 	 	 	 dNd!Z%	 	 	 	 	 	 	 	 	 	 dOd"Z& e'ej*                  jP                  e)jT                        Z+dPd#Z(dLd$Z,erdQdRd%Z- e'ej*                  jZ                  e)jT                        Z-er	 	 dS	 	 	 	 	 	 	 dTd&Z. e'ej*                  j\                  e)jT                        Z.er	 dQ	 	 	 	 	 dUd'Z/ e'ej*                  j^                  e)jT                        Z/er	 	 dS	 	 	 	 	 	 	 dVd(Z0 e'ej*                  j`                  e)jT                        Z0ej$                  dk7  sesL eej*                  d)      r9er	 	 dS	 	 	 	 	 	 	 dWd*Z1 e'ej*                  jb                  e)jT                  d+,      Z1ej$                  dk7  sesL eej*                  d-      r9er	 	 dS	 	 	 	 	 	 	 dXd.Z2 e'ej*                  jd                  e)jT                  d+,      Z2erdQdYd/Z3 e'ej*                  jf                  e)jH                        Z3e	 	 	 	 	 	 dZd0       Z4e	 	 	 	 	 	 	 	 d[d1       Z4 e5ej*                  jh                  d2d23      d\d4       Z4ej$                  dk7  sesH eej*                  d5      r4 e5ej*                  jl                  d2d23      	 	 	 d]	 	 	 	 	 	 	 	 	 d^d6       Z6yyy)_rt   c                    t        |      t        j                  ur"t        dt        |      j                   d      || _        | j
                  j                  d       d| _        y )Nz.expected object of type 'socket.socket', not ''F)rh   rT   r   r   rC   _socksetblocking_did_shutdown_SHUT_WR)r#   ru   s     r%   r&   z_SocketType.__init__  s^    :^222 @dATAT@UUVW  


u%%*"r'   c                6    | j                   j                         S r!   )rs  r   r1   s    r%   r   z_SocketType.detach       zz  ""r'   c                6    | j                   j                         S r!   )rs  r   r1   s    r%   r   z_SocketType.fileno#  rw  r'   c                6    | j                   j                         S r!   )rs  r   r1   s    r%   r   z_SocketType.getpeername&      zz%%''r'   c                6    | j                   j                         S r!   )rs  r   r1   s    r%   r   z_SocketType.getsockname)  rz  r'   c                     y r!   rF   r   s      r%   r   z_SocketType.getsockopt,  r   r'   c                     y r!   rF   r   s       r%   r   z_SocketType.getsockopt/  r   r'   Nc                x    || j                   j                  ||      S | j                   j                  |||      S r!   )rs  r   r   s       r%   r   z_SocketType.getsockopt2  s9     >::((88zz$$UGV<<r'   c                     y r!   rF   r   s       r%   r   z_SocketType.setsockopt<  r   r'   c                     y r!   rF   r   s        r%   r   z_SocketType.setsockopt?  r   r'   c                    |*|t        d      | j                  j                  |||      S |t        d|d      | j                  j                  ||||      S )NzKinvalid value for argument 'value', must not be None when specifying optlenz$invalid value for argument 'value': z%, must be None when specifying optlen)r   rs  r   r   s        r%   r   z_SocketType.setsockoptH  sv     >}a  ::((??6ui?de  zz$$UGUFCCr'   r   c                8    | j                   j                  |      S r!   )rs  r   r   s     r%   r   z_SocketType.listen^  s    zz  ))r'   c                6    | j                   j                         S r!   )rs  r   r1   s    r%   r   z_SocketType.get_inheritablea  s    zz))++r'   c                8    | j                   j                  |      S r!   )rs  r   r   s     r%   r   z_SocketType.set_inheritabled  s    zz))+66r'   r   r   c                8    | j                   j                  |      S r!   )rs  r   r   s     r%   r   z_SocketType.sharek  s    ::##J//r'   c                    | S r!   rF   r1   s    r%   r   z_SocketType.__enter__n  s    r'   c                <    | j                   j                  |||      S r!   )rs  r   r5   s       r%   r   z_SocketType.__exit__q  s     zz""8Y	BBr'   c                .    | j                   j                  S r!   )rs  rg   r1   s    r%   rg   z_SocketType.familyy  s    zz   r'   c                .    | j                   j                  S r!   )rs  rh   r1   s    r%   rh   z_SocketType.type}  s    zzr'   c                .    | j                   j                  S r!   )rs  ri   r1   s    r%   ri   z_SocketType.proto  s    zzr'   c                    | j                   S r!   )ru  r1   s    r%   r  z _SocketType.did_shutdown_SHUT_WR  s    )))r'   c                L    t        | j                        j                  dd      S )Nzsocket.socketztrio.socket.socket)reprrs  replacer1   s    r%   r  z_SocketType.__repr__  s    DJJ''9MNNr'   c                H    t        | j                  j                               S )z"Same as :meth:`socket.socket.dup`.)rt   rs  r  r1   s    r%   r  z_SocketType.dup  s    4::>>+,,r'   c                    | j                   j                         dk7  rDt        j                  j	                  | j                          | j                   j                          y y )N)rs  r   r.   r/   notify_closingr	  r1   s    r%   r	  z_SocketType.close  sB    ::"$MM((4JJ %r'   c                  K   | j                  |d       d {   }t        t        d      r^| j                  t        j                  k(  rA|d   r<t
        j                  j                  | j                  j                  |       d {   S t
        j                  j                          d {    | j                  j                  |      S 7 7 G7 #w)NTr   r   r   )r   r   rT   rg   r   r.   rc   rd   rs  r  r/   
checkpointr  s     r%   r  z_SocketType.bind  s     227$2GGNI.~555
 00'JJJ --**,,,::??7++ H K -s4   CCA-CC%C-C. CCCc                    | j                   j                  |       |t        j                  t        j                  fv rd| _        y y )NT)rs  r  rT   SHUT_WR	SHUT_RDWRru  r  s     r%   r  z_SocketType.shutdown  s;    

D!N**N,D,DEE)-D& Fr'   c                <   t         j                  dk(  r2t        j                  | j                  gg g d      \  }}}t	        |      S t        j
                         }|j                  | j                  t        j                         t	        |j                  d            S )Nr   r   )r   r   selectrs  r>   pollregisterPOLLIN)r#   rreadyr   ps       r%   r  z_SocketType.is_readable  sk    <<7"!==$**r2qALFAq<KKM	

4::v}}-AFF1Ir'   c                ^   K   t        j                  | j                         d {    y 7 wr!   )r   r  rs  r1   s    r%   r  z_SocketType.wait_writable  s     !!$**---s   #-+-c               ,  K   | j                   t        j                  k(  r9| j                  j	                  t        j
                  t        j                        }nd}t        | j                  | j                   | j                  |||       d {   S 7 w)NF)r   r   r   )
rg   rT   r   rs  r   IPPROTO_IPV6IPV6_V6ONLYr   rh   ri   )r#   r   r   r   s       r%   r   z!_SocketType._resolve_address_nocp  s|      ;;.111**//++**K
  K*IIKKJJ#
 
 	
 
s   BBBBc                6  K   t               4 d {     || j                  g|i |cd d d       d {    S 7 +7 # 1 d {  7  sw Y   nxY w	  || j                         d {  7   	  || j                  g|i |S # t        $ r Y nw xY wBwr!   )r   rs  r*   )r#   r   r   r   r   s        r%   r   z_SocketType._nonblocking_helper  s     8 ; 	3 	3djj24262	3 	3 	3 	3 	3 	3 	3 $**%%%$**6t6v66" 	 sn   B=BAB?BBAA
AB,A/-B3B	 B		BBBBc                ^   K   | j                          d{   \  }}t        |      |fS 7 w)z-Like :meth:`socket.socket.accept`, but async.N)_acceptrv   )r#   ru   addrs      r%   r  z_SocketType.accept  s-     <<>)
d!$'-- *s   -+-c           	     r  K   	 | j                  |d       d {   }t               4 d {    | j                  j                  |      cd d d       d {    S 7 C7 27 	# 1 d {  7  sw Y   nxY wt	        j
                  | j                         d {  7   n2# t        j                  $ r | j                  j                           w xY w| j                  j                  t        j                  t        j                        }|dk7  r%t        |d|dt        j                  |             y w)NFr  r   zError connecting to z: )r   r   rs  r  r   r  r.   	Cancelledr	  r   rT   r   SO_ERRORr   r   strerror)r#   r   errs      r%   r  z_SocketType.connect  s    
;	 66we6LLG { 03 03` zz))'2a03 03 03 M03 03 03 03 03f %%djj111~~ 	 JJ	 jj##N$=$=~?V?VW!8#!5g[2;;sCSBTUVV s   D7B" AB" A B" A$B" A"B" D7B"  B" "B" $A6*A-+A62)B" BB" !D7"/CA&D7c                    y r!   rF   r  s      r%   r  z_SocketType.recv^      r'   c                    y r!   rF   r  s       r%   r"  z_SocketType.recv_intok  s     !r'   c                    y r!   rF   r$  s      r%   r&  z_SocketType.recvfrom~  s    
 69r'   c                    y r!   rF   r  s       r%   r(  z_SocketType.recvfrom_into  s     47r'   r)  c                    y r!   rF   r+  s       r%   r)  z_SocketType.recvmsg  s	     VYr'   T)r   r.  c                    y r!   rF   r0  s       r%   r.  z_SocketType.recvmsg_into  s	     TWr'   c                    y r!   rF   r3  s      r%   r4  z_SocketType.send  r  r'   c                  K   y wr!   rF   r6  s      r%   r8  z_SocketType.sendto  r9  r:  c                  K   y wr!   rF   r<  s       r%   r8  z_SocketType.sendto  r=  r:  rF   rw   c                   K   t        |      }| j                  |d   d       d{   |d<    | j                  t        j                  t
        j                  j                  g|  d{   S 7 I7 w)z3Similar to :meth:`socket.socket.sendto`, but async.r  Fr  N)r   r   r   r   r  rT   r   r8  )r#   r   	args_lists      r%   r8  z_SocketType.sendto  s{     
 J	"88b8OO	" .T--!!((
 
 
 	
 P
s"   %A5A1AA5,A3-A53A5r?  c                  K   || j                  |d       d{   }| j                  t        j                  t        j
                  j                  ||||       d{   S 7 H7 w)zSimilar to :meth:`socket.socket.sendmsg`, but async.

            Only available on platforms where :meth:`socket.socket.sendmsg` is
            available.

            NFr  )r   r   r   r  rT   r   r?  rA  s        r%   r?  z_SocketType.sendmsg  sn      " $ : :7% : PP11##%%--   Qs"   A(A$AA(A& A(&A()ru   _stdlib_socket.socketr:   r;   rC  rD  rE  rF  r!   rG  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  r?   rV  rW  )r   r   r   r>   r:   r   )
r   2Callable[[_stdlib_socket.socket], Awaitable[None]]r   2Callable[Concatenate[_stdlib_socket.socket, P], T]r   r   r   r   r:   r   rX  rY  rZ  r[  r\  r^  r_  r`  ra  rc  rd  rf  rg  ri  rj  )7rC   rD   rE   r&   r   r   r   r   r   r   r   rk  rT   rl  r   r   r   r   r   r   r   r   r   r   r   rm  rg   rh   ri   r  r  r  r	  r  r  r  r  r   r   r   r  r   wait_readabler  r  r  r"  r&  r(  r)  r.  r4  r8  r   r?  rF   r'   r%   rt   rt     s   	+ ##(( > >M M "	== = 	=
 
= T T  	
  
  "DD D #	D
 D 
D, %((@(@#$F *,7 ||wgn&;&;WE	0C,C (C (	C
 
C ! !       * *O-
,$..

 	

 

8$C$ ?$ 	$
 $ 
$T /$$G
.DW\ O+""D  	! 	! 		!
 	! 	! 1''I 
 	9	9 	9
 4	9 0&&H  	7 	7 		7
 	7 2	7 5++M ||wgn&;&;YG
 #$	YY  Y 	Y TY 3!!))
 ||wgn&;&;^L
 #$	W)W  W 	W RW 8!!..
 O+""D  3
 
    3	 
  N!!((2rB
 C
$ ||wgn&;&;YG 
%%--B	G :<,0	%	 7	 		
 *	 	 
H		 HMr'   rt   )rG   HostnameResolver | Noner:   r  )rI   SocketFactory | Noner:   r  )r   r   r   r   )re   zbytes | str | Nonerf   zbytes | str | int | Nonerg   r   rh   r   ri   r   rj   r   r:   z]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]])rn   z+tuple[str, int] | tuple[str, int, int, int]rj   r   r:   ztuple[str, str])rq   r_   r:   r   )ru   r  r:   rr   )
r}   r	   rg   AddressFamily | intrh   SocketKind | intri   r   r:   rr   )r   r   r:   rr   )rg   r   rh   r   ri   r   r:   ztuple[SocketType, SocketType])
rg   r  rh   r  ri   r   r   rH  r:   rr   )
rg   r  r~   r  ri   r   r   rH  r:   z1tuple[AddressFamily | int, SocketKind | int, int])F)r   r  r   r  r   r>   r:   z3Callable[Concatenate[_SocketType, P], Awaitable[T]])r~   r   rg   r   ri   r   r   z
bool | intr   r   r   r>   r:   r   )T
__future__r   r   r  r   rT   r   operatorr   r   r   typingr   r   r	   r
   r   r   idnarb   r.   
trio._utilr   r   r   r   collections.abcr   r   r   typesr   typing_extensionsr   r   r   r   r   _abcr   r   r   r   r   __annotations__r   RunVarrH   rJ   rO   rQ   AI_NUMERICHOSTAI_NUMERICSERVr^   r]   rm   rp   rv   r|   r   SOCK_STREAMr   r   r   r   r   r   r   r   r{   getattr_SOCK_TYPE_MASKr   r   rr   __dict__itemsrq   obj
startswithr   stdlib_type
stdlib_objrt   rF   r'   r%   <module>r     s   " 	   
  ,    & ==#QQ5#A CL y  H 4@5<<@S3T	0 T6BellCS6T3 T.D(B --0M0MM P

P

"P
 P
 	P

 P
 P
P
f
9

 
2
* B7 #1"8"8+77	OOO O 	O
 O 8O <<7'.+> N$$r2>B ?B
 <<7GYE9"**MM4sM478GY8^22C78E98 !!B;#((
A
A

A 
A #	
A <
A B7"0"8"8+77	--
- - 	-
 - 8-6      	 
 7 T NOQ/nna01 :?  9	NGGG G
 G G G GT^& ^&D $$**, %ID#t%,,n.G.GG [$5
*,,
 	$$CK%M* Mr'   