
    hg                    X   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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 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          Z0de-d<    ej/        d          Z1de-d<   dbdZ2dcdZ3ej4        ej5        z  Z6	 	 	 	 ddded(Z7dfd,Z8dgd/Z9dhd3Z: eej;        d4d45          ej<        ej=        d fdid:            Z;ej>        d;k    ses) e?ed<          r eej@        d4d45          djd?            Z@ej>        d;k    reAZBde-d@<   eAZCde-dA<   ej<        ZDn+dZDdBe-dC<   eeAe	df         ZBde-d@<   eej        eAf         ZCde-dA<    eejE        d4d45          eDe
j=        d fdkdE            ZE eej        d4d45          ej<        ej=        d dfdldH            ZdmdKZF eGedLd            eGedMd           z   ZH	 dndodVZIdpd]ZJ G d^ d2          ZKeKjL        M                                D ]X\  ZNZOeNP                    d_          seOjQ        r"ej        ejK        fD ]ZR eGeReNd          ZSeSr	eSjQ        r nLeSjQ        eO_Q        Y G d` daeK          ZTdS )q    )annotationsN)index)AddressFamily
SocketKind)	TYPE_CHECKINGAny	AwaitableCallableLiteralSupportsIndexTypeVarUnionoverload)wraps   )_core)Iterable)TracebackType)BufferConcatenate	ParamSpecSelf	TypeAlias)HostnameResolverSocketFactoryPTr   AddressFormatc                  2    e Zd Z	 dddZdd	ZddZddZdS )	_try_syncNblocking_exc_override&Callable[[BaseException], bool] | Nonec                    || _         d S N)_blocking_exc_override)selfr!   s     E/var/www/fb-scrape/myenv/lib/python3.11/site-packages/trio/_socket.py__init__z_try_sync.__init__@   s     '<###    excBaseExceptionreturnboolc                d    | j         t          |t                    S |                      |          S r$   )r%   
isinstanceBlockingIOError)r&   r*   s     r'   _is_blocking_io_errorz_try_sync._is_blocking_io_errorF   s/    &.c?333..s333r)   Nonec                R   K   t           j                                         d {V  d S r$   )triolowlevelcheckpoint_if_cancelledr&   s    r'   
__aenter__z_try_sync.__aenter__L   s2      m3355555555555r)   exc_typetype[BaseException] | None	exc_valueBaseException | None	tracebackTracebackType | Nonec                   K   ||                      |          rdS t          j                                         d {V  dS )NTF)r1   r4   r5   cancel_shielded_checkpointr&   r9   r;   r=   s       r'   	__aexit__z_try_sync.__aexit__O   sS        T%?%?	%J%J  4-::<<<<<<<<<5r)   r$   )r!   r"   r*   r+   r,   r-   r,   r2   )r9   r:   r;   r<   r=   r>   r,   r-   )__name__
__module____qualname__r(   r1   r8   rB    r)   r'   r    r    ?   sp         IM< < < < <4 4 4 46 6 6 6     r)   r    hostname_resolverz%_core.RunVar[HostnameResolver | None]	_resolversocket_factoryz"_core.RunVar[SocketFactory | None]_socket_factoryHostnameResolver | Noner,   c                n    t                               d          }t                               |            |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)rJ   getset)rI   olds     r'   set_custom_hostname_resolverrR   g   s-    : --

CMM#$$$Jr)   SocketFactory | Nonec                n    t                               d          }t                               |            |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)rL   rO   rP   )rK   rQ   s     r'   set_custom_socket_factoryrU      s0    0 

d
#
#C'''Jr)   hostbytes | str | Noneportbytes | str | int | Nonefamilyinttypeprotoflags]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]]c           
     L  K   dd}t          |          4 d{V  t          j        | |||||t          z            cddd          d{V  S # 1 d{V swxY w Y   t	          | t
                    r=	 |                     d          } n&# t          $ r t          j        | d	          } Y nw xY wt          
                    d          }| |                    | |||||           d{V S t          j                            t          j        | |||||d
           d{V S )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`.

    r*   r+   r,   r-   c                `    t          | t          j                  o| 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44 7	^66	
r)   NasciiT)uts46abandon_on_cancelrC   )r    rb   getaddrinfo_NUMERIC_ONLYr/   strencodeUnicodeEncodeError_idnarJ   rO   r4   	to_threadrun_sync)rV   rX   rZ   r\   r]   r^   rf   hrs           r'   rk   rk      s     H
 
 
 
 -.. 
 
 
 
 
 
 
 
)M!
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
" $ 2	2;;w''DD! 	2 	2 	2 <D111DDD		2
 
t		B	~^^D$eUKKKKKKKKK^,,&" - 	
 	
 	
 	
 	
 	
 	
 	
 		
s#   !A
AA7B  B0/B0sockaddr+tuple[str, int] | tuple[str, int, int, int]tuple[str, str]c                   K   t                               d          }||                    | |           d{V S t          j                            t          j        | |d           d{V S )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`.

    NTri   )rJ   rO   getnameinfor4   rq   rr   rb   )rt   r^   rs   s      r'   rx   rx     s       
t		B	~^^He444444444^,,&"	 - 
 
 
 
 
 
 
 
 	
r)   namerm   c                j   K   t           j                            t          j        | d           d{V S )zkLook up a protocol number by name. (Rarely used.)

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

    Tri   N)r4   rq   rr   rb   getprotobyname)ry   s    r'   r{   r{     sQ       ((% )         r)   sock_stdlib_socket.socket
SocketTypec                     t          |           S )z]Convert a standard library :class:`socket.socket` object into a Trio
    socket object.

    )_SocketType)r|   s    r'   from_stdlib_socketr   /  s    
 tr)   rH   assignedupdatedfdr   AddressFamily | intSocketKind | intc                    t          |||t          |                     \  }}}t          t          j        | |||                    S )z=Like :func:`socket.fromfd`, but returns a Trio socket object.)_sniff_sockopts_for_filenor   r   rb   fromfd)r   rZ   r\   r]   type_s        r'   r   r   7  sD     6fdE5QS99UUFE5n3BuMMNNNr)   win32	fromshareinfobytesc                D    t          t          j        |                     S )z@Like :func:`socket.fromshare`, but returns a Trio socket object.)r   rb   r   )r   s    r'   r   r   G  s     ".":4"@"@AAAr)   FamilyTTypeTzLiteral[None]FamilyDefaulttuple[SocketType, SocketType]c                p    t          j        | ||          \  }}t          |          t          |          fS )zTLike :func:`socket.socketpair`, but returns a pair of Trio socket
    objects.

    )rb   
socketpairr   )rZ   r\   r]   leftrights        r'   r   r   W  s8     !+FD%@@KD%t$$&8&?&?@@r)   fileno
int | Nonec                    |4t                               d          }||                    | ||          S n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)rL   rO   socketr   rb   r   )rZ   r\   r]   r   sfstdlib_sockets         r'   r   r   e  s     ~  &&>99VT5111  9	
 
e #)&$vFFMm,,,r)   r   1tuple[AddressFamily | int, SocketKind | int, int]c                `   t           j        dk    r| ||fS ddlm}m}m}m} t          j        | |||          }	 |                    ||          } |                    ||          }|                    ||          }|	                                 n# |	                                 w xY w| ||fS )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   rb   
getsockoptdetach)	rZ   r   r]   r   r   r   r   r   sockobjs	            r'   r   r     s     |wue##            #FE5HHHG##J	::"":{;;"":w77 	5%s   AB B(SOCK_NONBLOCKSOCK_CLOEXECFfn2Callable[Concatenate[_stdlib_socket.socket, P], T]wait_fn2Callable[[_stdlib_socket.socket], Awaitable[None]]maybe_availr-   3Callable[Concatenate[_SocketType, P], Awaitable[T]]c                     t           dd          d fd            }d j         d|_        |r|xj        d j         dz  c_        |S )N)rE   rH   r   r&   r   argsP.argskwargsP.kwargsr,   r   c                8   K    | j         g|R i | d {V S r$   )_nonblocking_helper)r&   r   r   r   r   s      r'   wrapperz1_make_simple_sock_method_wrapper.<locals>.wrapper  s>      -T-grKDKKKFKKKKKKKKKr)   zLike :meth:`socket.socket.z`, but async.

            z7Only available on platforms where :meth:`socket.socket.z` is available.)r&   r   r   r   r   r   r,   r   )_wrapsrE   __doc__)r   r   r   r   s   ``  r'    _make_simple_sock_method_wrapperr     s    
 B333L L L L L L 43LR[   GO  
bk   	
 Nr)   r   ipv6_v6only
bool | intaddresslocalr   c                 K   |t           j        k    r8t          |t                    rt	          |          dk    st          d          n|t           j        k    rAt          |t                    rdt	          |          cxk    rdk    sn t          d          ndt          t           d          rM|t           j        k    r=t          |t          t          t          j        f          sJ t          j        |          S |S |^}}}t          |t                    r1|/	 t          j        ||           |S # t           t"          f$ r Y nw xY w|dk    rd }|dk    rd}d	}	|r|	t           j        z  }	|t           j        k    r|s|	t           j        z  }	t)          |||| ||	           d {V }
t	          |
          d
k    sJ |
^^ }}}|t           j        k    rot+          |          }t	          |          dk    sJ t	          |          dk    r|d         |d<   t	          |          dk    r|d         |d<   t          |          S |S )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      )rb   AF_INETr/   tuplelen
ValueErrorAF_INET6hasattrr   rm   r   osPathLikefspathr[   	inet_ptonOSError	TypeError
AI_PASSIVEAI_V4MAPPEDrk   list)r   rZ   r]   r   r   r   rV   rX   _r^   gai_resnormedlist_normeds                r'   _resolve_address_nocpr     s      ''''5)) 	GW1B1BEFFF 2C	>*	*	*'5)) 	c'll1G1G1G1Ga1G1G1G1GO   2H 
	+	+ .:P0P0P'C#<=====y!!! ND$ $ !1	$VT222 N # 	 	 	D	
 rzz} E +** ((((++dFE5%HHHHHHHHG w<<1La1 (((6ll6{{aw<<1$QZKNw<<1$QZKN[!!!Ms   D4 4EEc                      e Zd Zdl fdZdmdZdmdZdndZdnd	Zedod            Z	edpd            Z		 dqdrdZ	edsd            Z
edtd            Z
	 dqdudZ
 eej        d          fdvdZdwdZdxd!Zej        d"k    ses eej        d#          rdyd%Zdzd'Zd{d.Zed|d0            Zed}d2            Zedmd3            Zedwd4            Zd~d6Zdd7Zdld8Z dd:Z!dd<Z"dwd=Z#dld>Z$dd@Z%ddAZ&dddFZ'	 	 dddLZ(	 dddOZ)	 	 dddQZ*ej        d"k    ses eej        dR          r	 	 dddUZ+ej        d"k    ses eej        dV          r	 	 dddZZ,ddd\Z-edd`            Z.edda            Z.dddZ.ej        d"k    ses; eej        de          r. e/ej        j0        dfdfg          	 	 	 dddk            Z0 xZ1S  xZ1S  xZ1S )r~   r,   r2   c                    t                                                       t          |           t          u rt	          d          d S )Nz`SocketType is an abstract class; use trio.socket.socket if you want to construct a socket object)superr(   r\   r~   r   )r&   	__class__s    r'   r(   zSocketType.__init__"  sI    ::##4   $#r)   r[   c                    t           r$   NotImplementedErrorr7   s    r'   r   zSocketType.detach,      !!r)   c                    t           r$   r   r7   s    r'   r   zSocketType.fileno/  r   r)   r   c                    t           r$   r   r7   s    r'   getpeernamezSocketType.getpeername2  r   r)   c                    t           r$   r   r7   s    r'   getsocknamezSocketType.getsockname5  r   r)   leveloptnamec                   d S r$   rH   r&   r   r   s      r'   r   zSocketType.getsockopt8      >Acr)   buflenr   c                   d S r$   rH   r&   r   r   r   s       r'   r   zSocketType.getsockopt;      MPSr)   Nr   int | bytesc                   t           r$   r   r   s       r'   r   zSocketType.getsockopt>  s
     "!r)   valueint | Bufferc                   d S r$   rH   r&   r   r   r   s       r'   
setsockoptzSocketType.setsockoptG      TWTWr)   optlenc                   d S r$   rH   r&   r   r   r   r   s        r'   r   zSocketType.setsockoptJ  	     sr)   int | Buffer | Nonec                   t           r$   r   r   s        r'   r   zSocketType.setsockoptT  s
     "!r)      backlogc                   t           r$   r   r&   r  s     r'   listenzSocketType.listen^  r   r)   r-   c                    t           r$   r   r7   s    r'   get_inheritablezSocketType.get_inheritablea  r   r)   inheritablec                    t           r$   r   r&   r  s     r'   set_inheritablezSocketType.set_inheritabled  r   r)   r   share
process_idc                   t           r$   r   r&   r  s     r'   r  zSocketType.sharek  s    %%r)   r   c                    t           r$   r   r7   s    r'   	__enter__zSocketType.__enter__n  r   r)   r9   r:   r;   r<   r=   r>   c                    t           r$   r   rA   s       r'   __exit__zSocketType.__exit__q  
     "!r)   r   c                    t           r$   r   r7   s    r'   rZ   zSocketType.familyy      !!r)   r   c                    t           r$   r   r7   s    r'   r\   zSocketType.type}  r  r)   c                    t           r$   r   r7   s    r'   r]   zSocketType.proto  r  r)   c                    t           )zBReturn True if the socket has been shut down with the SHUT_WR flagr   r7   s    r'   did_shutdown_SHUT_WRzSocketType.did_shutdown_SHUT_WR  s
     "!r)   rm   c                    t           r$   r   r7   s    r'   __repr__zSocketType.__repr__  r   r)   c                    t           r$   r   r7   s    r'   dupzSocketType.dup  r   r)   c                    t           r$   r   r7   s    r'   closezSocketType.close  r   r)   r   c                   K   t           r$   r   r&   r   s     r'   bindzSocketType.bind        !!r)   flagc                    t           r$   r   r&   r$  s     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   r7   s    r'   is_readablezSocketType.is_readable  r  r)   c                   K   t           )zIConvenience method that calls trio.lowlevel.wait_writable for the object.r   r7   s    r'   wait_writablezSocketType.wait_writable  s      !!r)    tuple[SocketType, AddressFormat]c                   K   t           r$   r   r7   s    r'   acceptzSocketType.accept  r#  r)   c                   K   t           r$   r   r!  s     r'   connectzSocketType.connect  r#  r)   r   _SocketType__buflen_SocketType__flagsAwaitable[bytes]c                    t           r$   r   _SocketType__selfr1  r2  s      r'   recvzSocketType.recv  r   r)   bufferr   nbytesr^   Awaitable[int]c                    t           r$   r   r6  r8  r9  r^   s       r'   	recv_intozSocketType.recv_into  r  r)   _SocketType__bufsize&Awaitable[tuple[bytes, AddressFormat]]c                    t           r$   r   r6  r>  r2  s      r'   recvfromzSocketType.recvfrom  s
    
 "!r)   $Awaitable[tuple[int, AddressFormat]]c                    t           r$   r   r<  s       r'   recvfrom_intozSocketType.recvfrom_into  r  r)   recvmsg_SocketType__ancbufsize?Awaitable[tuple[bytes, list[tuple[int, int, bytes]], int, Any]]c                    t           r$   r   r6  r>  rG  r2  s       r'   rF  zSocketType.recvmsg  
     &%r)   recvmsg_into_SocketType__buffersIterable[Buffer]=Awaitable[tuple[int, list[tuple[int, int, bytes]], int, Any]]c                    t           r$   r   r6  rM  rG  r2  s       r'   rL  zSocketType.recvmsg_into  rK  r)   _SocketType__bytesc                    t           r$   r   r6  rR  r2  s      r'   sendzSocketType.send  r   r)   _SocketType__data_SocketType__address!tuple[object, ...] | str | Bufferc                
   K   d S r$   rH   r&   rV  rW  s      r'   sendtozSocketType.sendto        
 cr)   c                
   K   d S r$   rH   r&   rV  r2  rW  s       r'   r[  zSocketType.sendto         cr)   r   r   c                   K   t           r$   r   )r&   r   s     r'   r[  zSocketType.sendto  r#  r)   sendmsgrH   r   _SocketType__ancdata!Iterable[tuple[int, int, Buffer]]AddressFormat | Nonec                   K   t           r$   r   r&   rM  rb  r2  rW  s        r'   ra  zSocketType.sendmsg  s       &%r)   rD   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,   r2   
r   r[   r   r[   r   r2   r   r[   r,   r2   
r   r[   r   r[   r   r   r   r   r,   r2   r  r[   r,   r2   r,   r-   r  r-   r,   r2   r  r[   r,   r   r,   r   r9   r:   r;   r<   r=   r>   r,   r2   r,   r   r,   r   r,   rm   r,   r~   r   r   r,   r2   r$  r[   r,   r2   r,   r,  r   r1  r[   r2  r[   r,   r3  r   r   r8  r   r9  r[   r^   r[   r,   r:  r>  r[   r2  r[   r,   r?  r8  r   r9  r[   r^   r[   r,   rC  r>  r[   rG  r[   r2  r[   r,   rH  rM  rN  rG  r[   r2  r[   r,   rO  rR  r   r2  r[   r,   r:  rV  r   rW  rX  r,   r[   rV  r   r2  r[   rW  rX  r,   r[   r   r   r,   r[   rH   r   N
rM  rN  rb  rc  r2  r[   rW  rd  r,   r[   )2rE   rF   rG   r(   r   r   r   r   r   r   r   minrb   	SOMAXCONNr  r  r
  r   r   r   r   r   r  r  r  propertyrZ   r\   r]   r  r  r  r  r"  r'  r)  r+  r.  r0  r7  r=  rB  rE  rF  rL  rU  r[  r   ra  __classcell__)r   s   @r'   r~   r~   !  s5            " " " "" " " "" " " "" " " " AAA XAPPP XP "" " " " " WWW XW   X "" " " " " (+s>+CS'I'I " " " " "" " " "" " " " |w %gn&;WEE 	& 	& 	& 	&" " " "" " " " " " " X" " " " X" " " " X" " " " X"" " " "" " " "" " " "" " " "" " " "" " " "" " " "" " " "" " " "" " " " " 	" " " " " " " " " " 	" " " " " |w %gn&;YGG  !"		& 	& 	& 	& 	& |w %gn&;^LL  !"		& 	& 	& 	& 	&" " " " "    X    X" " " " |w %gn&;YGG  
%-B	G	G	G <>.2	& 	& 	& 	& 
H	G	& 	& 	& 	& 	& r)   __c                     e Zd Zd|dZd}dZd}dZd~d	Zd~d
Zedd            Z	edd            Z		 dddZ	edd            Z
edd            Z
	 dddZ
 eej        d          fddZdd!Zdd#Zej        d$k    ses eej        d%          rdd'Zdd)Zdd0Zedd2            Zedd4            Zed}d5            Zedd6            Zdd8Zdd:Zdd;Z dd=Z!dd?Z"dd@Z#ddAZ$ddCZ%ddMZ& e'ej        j(        e)j*                  Z+ddOZ(ddPZ,erdddUZ- e'ej        j-        e)j*                  Z-er	 	 ddd[Z. e'ej        j.        e)j*                  Z.er	 ddd^Z/ e'ej        j/        e)j*                  Z/er	 	 ddd`Z0 e'ej        j0        e)j*                  Z0ej        d$k    ses7 eej        da          r&er	 	 ddddZ1 e'ej        j1        e)j*        def          Z1ej        d$k    ses7 eej        dg          r&er	 	 dddkZ2 e'ej        j2        e)j*        def          Z2erdddmZ3 e'ej        j3        e)j$                  Z3eddq            Z4eddr            Z4 e5ej        j4        dsdst          ddv            Z4ej        d$k    ses9 eej        dw          r* e5ej        j6        dsdst          	 	 	 ddd{            Z6dS dS dS )r   r|   r}   c                    t          |          t          j        ur%t          dt          |          j         d          || _        | j                            d           d| _        d S )Nz.expected object of type 'socket.socket', not ''F)r\   rb   r   r   rE   _socksetblocking_did_shutdown_SHUT_WR)r&   r|   s     r'   r(   z_SocketType.__init__  sn    ::^222 WdATWWW   

u%%%%*"""r)   r,   r[   c                4    | j                                         S r$   )r  r   r7   s    r'   r   z_SocketType.detach       z  """r)   c                4    | j                                         S r$   )r  r   r7   s    r'   r   z_SocketType.fileno#  r  r)   r   c                4    | j                                         S r$   )r  r   r7   s    r'   r   z_SocketType.getpeername&      z%%'''r)   c                4    | j                                         S r$   )r  r   r7   s    r'   r   z_SocketType.getsockname)  r  r)   r   r   c                   d S r$   rH   r   s      r'   r   z_SocketType.getsockopt,  r   r)   r   r   c                   d S r$   rH   r   s       r'   r   z_SocketType.getsockopt/  r   r)   Nr   r   c               t    || j                             ||          S | j                             |||          S r$   )r  r   r   s       r'   r   z_SocketType.getsockopt2  s;     >:((888z$$UGV<<<r)   r   r   r2   c                   d S r$   rH   r   s       r'   r   z_SocketType.setsockopt=  r   r)   r   c                   d S r$   rH   r   s        r'   r   z_SocketType.setsockopt@  r   r)   r   c                   |-|t          d          | j                            |||          S |t          d|d          | 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   r  r   r   s        r'   r   z_SocketType.setsockoptJ  s     >}a   :((???eueee   z$$UGUFCCCr)   r   r  c               6    | j                             |          S r$   )r  r  r  s     r'   r  z_SocketType.listena  s    z  )))r)   r-   c                4    | j                                         S r$   )r  r  r7   s    r'   r  z_SocketType.get_inheritabled  s    z))+++r)   r  c                6    | j                             |          S r$   )r  r
  r	  s     r'   r
  z_SocketType.set_inheritableg  s    z))+666r)   r   r  r  c               6    | j                             |          S r$   )r  r  r  s     r'   r  z_SocketType.sharen  s    :##J///r)   r   c                    | S r$   rH   r7   s    r'   r  z_SocketType.__enter__q  s    r)   r9   r:   r;   r<   r=   r>   c                :    | j                             |||          S r$   )r  r  rA   s       r'   r  z_SocketType.__exit__t  s     z""8Y	BBBr)   r   c                    | j         j        S r$   )r  rZ   r7   s    r'   rZ   z_SocketType.family|  s    z  r)   r   c                    | j         j        S r$   )r  r\   r7   s    r'   r\   z_SocketType.type  s    zr)   c                    | j         j        S r$   )r  r]   r7   s    r'   r]   z_SocketType.proto  s    zr)   c                    | j         S r$   )r  r7   s    r'   r  z _SocketType.did_shutdown_SHUT_WR  s    ))r)   rm   c                R    t          | j                                      dd          S )Nzsocket.socketztrio.socket.socket)reprr  replacer7   s    r'   r  z_SocketType.__repr__  s#    DJ''9MNNNr)   r~   c                N    t          | j                                                  S )z"Same as :meth:`socket.socket.dup`.)r   r  r  r7   s    r'   r  z_SocketType.dup  s    4:>>++,,,r)   c                    | j                                         dk    r?t          j                            | j                    | j                                          d S d S )N)r  r   r4   r5   notify_closingr  r7   s    r'   r  z_SocketType.close  sU    :"$$M((444J %$r)   r   c                  K   |                      |d           d {V }t          t          d          rM| j        t          j        k    r8|d         r0t
          j                            | j        j	        |           d {V S t
          j
                                         d {V  | j        	                    |          S )NTr   r   r   )r   r   rb   rZ   r   r4   rq   rr   r  r"  r5   
checkpointr!  s     r'   r"  z_SocketType.bind  s      227$2GGGGGGGGNI..	,~555
 6
 00'JJJJJJJJJ -**,,,,,,,,,:??7+++r)   r$  c                    | j                             |           |t          j        t          j        fv r	d| _        d S d S )NT)r  r'  rb   SHUT_WR	SHUT_RDWRr  r&  s     r'   r'  z_SocketType.shutdown  sE    
D!!!N*N,DEEE)-D&&& FEr)   c                6   t           j        dk    r0t          j        | j        gg g d          \  }}}t	          |          S t          j                    }|                    | j        t          j                   t	          |                    d                    S )Nr   r   )r   r   selectr  r-   pollregisterPOLLIN)r&   rreadyr   ps       r'   r)  z_SocketType.is_readable  ss    <7""!=$*r2qAALFAq<<KMM	

4:v}---AFF1IIr)   c                H   K   t          j        | j                   d {V  d S r$   )r   r+  r  r7   s    r'   r+  z_SocketType.wait_writable  s1      !$*-----------r)   r   c                  K   | j         t          j        k    r0| j                            t          j        t          j                  }nd}t          | j        | j         | j	        |||           d {V S )NF)r   r   r   )
rZ   rb   r   r  r   IPPROTO_IPV6IPV6_V6ONLYr   r\   r]   )r&   r   r   r   s       r'   r   z!_SocketType._resolve_address_nocp  s       ;.111*//+* KK
  K*IKJ#
 
 
 
 
 
 
 
 
 	
r)   r   r   r   r   r   r   r   r   r   c                  K   t                      4 d {V   || j        g|R i |cd d d           d {V  S # 1 d {V swxY w Y   	  || j                   d {V  	  || j        g|R i |S # t          $ r Y nw xY w9r$   )r    r  r0   )r&   r   r   r   r   s        r'   r   z_SocketType._nonblocking_helper  sZ     8 ;; 	3 	3 	3 	3 	3 	3 	3 	32dj24222622	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3	'$*%%%%%%%%%r$*6t666v666"   		s!   ;
AA$A5 5
BBr,  c                b   K   |                                   d{V \  }}t          |          |fS )z-Like :meth:`socket.socket.accept`, but async.N)_acceptr   )r&   r|   addrs      r'   r.  z_SocketType.accept  s<      <<>>))))))
d!$''--r)   c           	     >  K   	 |                      |d           d {V }t                      4 d {V  | j                            |          cd d d           d {V  S # 1 d {V swxY w Y   t	          j        | j                   d {V  n-# t          j        $ r | j                                          w xY w| j        	                    t          j        t          j                  }|dk    r(t          |d|dt          j        |                     d S )NFr  r   zError connecting to z: )r   r    r  r0  r   r+  r4   	Cancelledr  r   rb   r   SO_ERRORr   r   strerror)r&   r   errs      r'   r0  z_SocketType.connect  s     
;	 66we6LLLLLLLLG {{ 03 03 03 03 03 03 03 03` z))'22a03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03f %dj1111111111~ 	 	 	 J	 j##N$=~?VWW!88#UgUU2;sCSCSUUVVV 8s.   1B A"B "
A,,B /A,0"B *B=r   r1  r2  r3  c                    d S r$   rH   r5  s      r'   r7  z_SocketType.recva        r)   r8  r   r9  r^   r:  c                    d S r$   rH   r<  s       r'   r=  z_SocketType.recv_intoq  s	    
 !Sr)   r>  r?  c                    d S r$   rH   rA  s      r'   rB  z_SocketType.recvfrom  s	     69Sr)   rC  c                    d S r$   rH   r<  s       r'   rE  z_SocketType.recvfrom_into  s	    
 473r)   rF  rG  rH  c                    d S r$   rH   rJ  s       r'   rF  z_SocketType.recvmsg  s    
 SVRUr)   T)r   rL  rM  rN  rO  c                    d S r$   rH   rQ  s       r'   rL  z_SocketType.recvmsg_into  s    
 QTPSr)   rR  c                    d S r$   rH   rT  s      r'   rU  z_SocketType.send  r  r)   rV  rW  rX  c                
   K   d S r$   rH   rZ  s      r'   r[  z_SocketType.sendto  r\  r)   c                
   K   d S r$   rH   r^  s       r'   r[  z_SocketType.sendto  r_  r)   rH   r   r   c                   K   t          |          }|                     |d         d           d{V |d<    | j        t          j        t
          j        j        g|R   d{V S )z3Similar to :meth:`socket.socket.sendto`, but async.r  Fr  N)r   r   r   r   r+  rb   r   r[  )r&   r   	args_lists      r'   r[  z_SocketType.sendto  s      
 JJ	"88b8OOOOOOOO	" .T-!(
 
 
 
 
 
 
 
 
 
 	
r)   ra  rb  rc  rd  c                   K   ||                      |d           d{V }|                     t          j        t          j        j        ||||           d{V S )zSimilar to :meth:`socket.socket.sendmsg`, but async.

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

            NFr  )r   r   r   r+  rb   r   ra  rf  s        r'   ra  z_SocketType.sendmsg  s       $"&"<"<Ye"<"T"TTTTTTT	11#%-        r)   )r|   r}   rg  rh  ri  rj  r$   rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  rD   ry  rz  )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  )7rE   rF   rG   r(   r   r   r   r   r   r   r   r  rb   r  r  r  r
  r   r   r   r   r   r  r  r  r  rZ   r\   r]   r  r  r  r  r"  r'  r)  r+  r   r   r   r.  r   wait_readabler  r0  r7  r=  rB  rE  rF  rL  rU  r[  r   ra  rH   r)   r'   r   r     s       	+ 	+ 	+ 	+ # # # ## # # #( ( ( (( ( ( ( AAA XAPPP XP "	= 	= 	= 	= 	= WWW XW   X "D D D D D. (+s>+CS'I'I * * * * *, , , ,7 7 7 7 |w %gn&;WEE 	0 	0 	0 	0   C C C C ! ! ! X!    X       X  * * * X*O O O O- - - -   
, , , ,$. . . .   . . . .
 
 
 
8$ $ $ $T /.$ G
. . . .DW DW DW DW\  SRRRRR
 ,+" D  !
 		! 	! 	! 	! 	! 10' I  9
 	9 	9 	9 	9 	9 0/& H  7
 		7 	7 	7 	7 	7 54+ M |w %gn&;YGG   	V
 %& 	V V V V V 32!)
 
 
 |w %gn&;^LL   	T
 %& 	T T T T T 87!.
 
 
  SRRRRR++" D    X    X VN!(2rBBB
 
 
 CB
$ |w %gn&;YGG  
%-B	G	G	G <>.2	 	 	 	 
H	G	 	 	 r)   r   )rI   rM   r,   rM   )rK   rS   r,   rS   )r   r   r   r   )rV   rW   rX   rY   rZ   r[   r\   r[   r]   r[   r^   r[   r,   r_   )rt   ru   r^   r[   r,   rv   )ry   rm   r,   r[   )r|   r}   r,   r~   )
r   r   rZ   r   r\   r   r]   r[   r,   r~   )r   r   r,   r~   )rZ   r   r\   r   r]   r[   r,   r   )
rZ   r   r\   r   r]   r[   r   r   r,   r~   )
rZ   r   r   r   r]   r[   r   r   r,   r   )F)r   r   r   r   r   r-   r,   r   )r   r[   rZ   r   r]   r[   r   r   r   r   r   r-   r,   r   )U
__future__r   r   r  r   rb   r   operatorr   r   r   typingr   r   r	   r
   r   r   r   r   r   idnarp   r4   
trio._utilr   r   r   r   collections.abcr   typesr   typing_extensionsr   r   r   r   r   _abcr   r   r   r   r   __annotations__r    RunVarrJ   rL   rR   rU   AI_NUMERICHOSTAI_NUMERICSERVrl   rk   rx   r{   r   r   r   SOCK_STREAMr   r   r   r[   r   r   r   r   r   getattr_SOCK_TYPE_MASKr   r   r~   __dict__itemsry   obj
startswithr   stdlib_type
stdlib_objr   rH   r)   r'   <module>r     s   " " " " " " " 				      



       , , , , , , , ,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
      & & & & & &       ((((((######QQQQQQQQQQQQQQ55555555	#A GCLL            H 4@5<@S3T3T	 T T T T6BelCS6T6T T T T T   D   B -0MM P
 P
 P
 P
 P
f
 
 
 
2
 
 
 
*    B777 #1"8+7	O O O O 87O <7 !'.+>>  VN$r2>>>B B B ?>B
 <7GE"*MM#'M''''sM478G8888^2C78E8888 !B;;;#(
A 
A 
A 
A <;
A B777"0"8+7	- - - - 87-6       T GNOQ//gnna001     NG G G GT\& \& \& \& \& \& \& \&@ $**,, % %ID#t  %,n.GG  W[$55
 	*, 	E$CKKK K K K K* K K K K Kr)   