a
    (ñ»j–±  ã                	   @  sÚ  U d dl mZ d dlZd dlZd dlZd dlZd dl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„ dƒZ-e .d¡Z/de,d< e .d¡Z0de,d< dddœdd„Z1dddœdd „Z2ej3Z4e4e5ed!d ƒO Z4dgd"d#d$d$d$d$d%d&œd'd(„Z6d)d$d*d+œd,d-„Z7d.d$d/œd0d1„Z8d2d3d4œd5d6„Z9eej:d7d7d8�ej;ej<d fd9d:d;d$d3d<œd=d>„ƒZ:ej=d?k�se�s$e>ed@ƒ�r$eej?d7d7d8�dAd3dBœdCd@„ƒZ?ej=d?k�rPe@ZAde,dD< e@ZBde,dE< ej;ZCn8dZCdFe,dG< ee@e	df ZAde,dD< eeje@f ZBde,dE< eejDd7d7d8�eCe
j<d fdDdEd$dHdIœdJdK„ƒZDeejd7d7d8�ej;ej<d dfd:d;d$dLd3dMœdNdO„ƒZd:d;d$dLdPdQœdRdS„ZEe5edTd ƒe5edUd ƒB  ZFdhdWdXdYdZd[œd\d]„ZGd$d^d$d_ddYdd`œdadb„ZHG dcd3„ d3ƒZIeIjJ K¡ D ]b\ZLZMeL Ndd¡�sbeMjO�r‚�qbejejIfD ]&ZPe5ePeLdƒZQeQ�rŽeQjO�rŽ �qº�qŽ�qbeQjOeM_O�qbG dedf„ dfeIƒZRdS )ié    )Ú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                   @  sP   e Zd Zddddœdd„Zddd	œd
d„Zddœdd„Zdddddœdd„ZdS )Ú	_try_syncNz&Callable[[BaseException], bool] | NoneÚNone)Úblocking_exc_overrideÚreturnc                 C  s
   || _ d S ©N)Ú_blocking_exc_override)Úselfr   © r$   ú2E:\soccer\ml_env\Lib\site-packages\trio/_socket.pyÚ__init__=   s    z_try_sync.__init__ÚBaseExceptionÚbool©Úexcr    c                 C  s"   | j d u rt|tƒS |   |¡S d S r!   )r"   Ú
isinstanceÚBlockingIOError)r#   r*   r$   r$   r%   Ú_is_blocking_io_errorC   s    

z_try_sync._is_blocking_io_error©r    c                 Ã  s   t j ¡ I d H  d S r!   )ÚtrioÚlowlevelZcheckpoint_if_cancelled©r#   r$   r$   r%   Ú
__aenter__I   s    z_try_sync.__aenter__útype[BaseException] | NoneúBaseException | NoneúTracebackType | None©Úexc_typeÚ	exc_valueÚ	tracebackr    c                 Ã  s.   |d ur|   |¡rdS tj ¡ I d H  dS d S )NTF)r-   r/   r0   Zcancel_shielded_checkpoint©r#   r7   r8   r9   r$   r$   r%   Ú	__aexit__L   s    z_try_sync.__aexit__)N)Ú__name__Ú
__module__Ú__qualname__r&   r-   r2   r;   r$   r$   r$   r%   r   <   s
    þr   Úhostname_resolverz%_core.RunVar[HostnameResolver | None]Ú	_resolverÚsocket_factoryz"_core.RunVar[SocketFactory | None]Ú_socket_factoryzHostnameResolver | None)r?   r    c                 C  s   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)r@   ÚgetÚset)r?   Úoldr$   r$   r%   Úset_custom_hostname_resolverd   s    

rF   zSocketFactory | None)rA   r    c                 C  s   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)rB   rC   rD   )rA   rE   r$   r$   r%   Úset_custom_socket_factory†   s    

rG   ÚAI_NUMERICSERVzbytes | str | Nonezbytes | str | int | NoneÚintzqlist[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]])ÚhostÚportÚfamilyÚtypeÚprotoÚflagsr    c              
   Ã  sò   dddœdd„}t |ƒ4 I dH š. t | |||||tB ¡W  d  ƒI dH  S 1 I dH sZ0    Y  t| tƒržz|  d¡} W n  tyœ   tj| dd	�} Y n0 t	 
d¡}|durÊ| | |||||¡I dH S tjjtj| |||||dd
�I dH S d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)   c                 S  s   t | tjƒo| jtjkS r!   )r+   Ú_stdlib_socketÚgaierrorÚerrnoÚ
EAI_NONAME)r*   r$   r$   r%   Únumeric_only_failureÒ   s    
þz)getaddrinfo.<locals>.numeric_only_failureNÚasciiT)Úuts46©Zabandon_on_cancel)r   rP   ÚgetaddrinfoÚ_NUMERIC_ONLYr+   ÚstrÚencodeÚUnicodeEncodeErrorÚ_idnar@   rC   r/   Ú	to_threadÚrun_sync)rJ   rK   rL   rM   rN   rO   rT   Úhrr$   r$   r%   rX   ®   s8    $ú.

ørX   z+tuple[str, int] | tuple[str, int, int, int]ztuple[str, str])ÚsockaddrrO   r    c                 Ã  sD   t  d¡}|dur$| | |¡I dH S tjjtj| |dd�I dH S d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`.

    NTrW   )r@   rC   Úgetnameinfor/   r^   r_   rP   )ra   rO   r`   r$   r$   r%   rb     s    
ürb   rZ   )Únamer    c                 Ã  s   t jjtj| dd�I dH S )zkLook up a protocol number by name. (Rarely used.)

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

    TrW   N)r/   r^   r_   rP   Úgetprotobyname)rc   r$   r$   r%   rd     s
    ýrd   ú_stdlib_socket.socketÚ
SocketType©Úsockr    c                 C  s   t | ƒS )z]Convert a standard library :class:`socket.socket` object into a Trio
    socket object.

    )Ú_SocketType)rh   r$   r$   r%   Úfrom_stdlib_socket/  s    rj   r$   ©ÚassignedÚupdatedr   zAddressFamily | intzSocketKind | int)ÚfdrL   rM   rN   r    c                 C  s,   t |||t| ƒƒ\}}}tt | |||¡ƒS )z=Like :func:`socket.fromfd`, but returns a Trio socket object.)Ú_sniff_sockopts_for_filenor   rj   rP   Úfromfd)rn   rL   rM   rN   Útype_r$   r$   r%   rp   7  s    rp   Úwin32Ú	fromshareÚbytes)Úinfor    c                 C  s   t t | ¡ƒS )z@Like :func:`socket.fromshare`, but returns a Trio socket object.)rj   rP   rs   )ru   r$   r$   r%   rs   G  s    ÚFamilyTÚTypeTr   ÚFamilyDefaultztuple[SocketType, SocketType])rL   rM   rN   r    c                 C  s"   t  | ||¡\}}t|ƒt|ƒfS )zTLike :func:`socket.socketpair`, but returns a pair of Trio socket
    objects.

    )rP   Ú
socketpairrj   )rL   rM   rN   ÚleftÚrightr$   r$   r%   ry   W  s    
ry   ú
int | None)rL   rM   rN   Úfilenor    c                 C  sV   |du r*t  d¡}|dur>| | ||¡S nt| |||ƒ\} }}t | |||¡}t|ƒS )z™Create a new Trio socket, like :class:`socket.socket`.

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

    N)rB   rC   Úsocketro   rP   rj   )rL   rM   rN   r}   ZsfZstdlib_socketr$   r$   r%   r~   e  s    
ü
r~   z1tuple[AddressFamily | int, SocketKind | int, int])rL   rq   rN   r}   r    c           	      C  s„   t jdkr| ||fS ddlm}m}m}m} tj| |||d�}z0| ||¡} | ||¡}| ||¡}W | 	¡  n
| 	¡  0 | ||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ƒ   rP   Ú
getsockoptÚdetach)	rL   rq   rN   r}   r€   r�   r‚   rƒ   Zsockobjr$   r$   r%   ro   �  s    


ro   ZSOCK_NONBLOCKZSOCK_CLOEXECFú2Callable[Concatenate[_stdlib_socket.socket, P], T]ú2Callable[[_stdlib_socket.socket], Awaitable[None]]r(   z3Callable[Concatenate[_SocketType, P], Awaitable[T]])ÚfnÚwait_fnÚmaybe_availr    c                   sX   t ˆ ddd�dddddœ‡ ‡fd	d
„ƒ}dˆ j› d�|_|rT| jdˆ j› d�7  _|S )N)r<   r$   rk   ri   úP.argsúP.kwargsr   )r#   ÚargsÚkwargsr    c                 Ÿ  s    | j ˆˆ g|¢R i |¤ŽI d H S r!   )Ú_nonblocking_helper)r#   r�   r�   ©rŠ   r‹   r$   r%   Úwrapperµ  s    z1_make_simple_sock_method_wrapper.<locals>.wrapperzLike :meth:`socket.socket.z`, but async.

            z7Only available on platforms where :meth:`socket.socket.z` is available.)Ú_wrapsr<   Ú__doc__)rŠ   r‹   rŒ   r“   r$   r’   r%   Ú _make_simple_sock_method_wrapper°  s    ÿr–   r   z
bool | int)rq   rL   rN   Úipv6_v6onlyÚaddressÚlocalr    c             	   Ã  sÈ  |t jkr*t|tƒr t|ƒdksštdƒ‚np|t jkrbt|tƒrXdt|ƒ  krVdksšn tdƒ‚n8tt dƒr–|t jkr–t|t	t
tjfƒsŒJ ‚t |¡S |S |^}}}t|tƒrâ|d urâzt  ||¡ W n ttfyÜ   Y n0 |S |dkrîd }|dkrúd}d	}	|�r|	t jO }	|t jk�r*|�s*|	t jO }	t|||| ||	ƒI d H }
t|
ƒd
k�sTJ ‚|
^�^ }}}|t jk�rÄt|ƒ}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   é   )rP   ÚAF_INETr+   ÚtupleÚlenÚ
ValueErrorÚAF_INET6Úhasattrrœ   rZ   rt   ÚosÚPathLikeÚfspathrI   Ú	inet_ptonÚOSErrorÚ	TypeErrorÚ
AI_PASSIVEÚAI_V4MAPPEDrX   Úlist)rq   rL   rN   r—   r˜   r™   rJ   rK   Ú_rO   Zgai_resÚnormedZlist_normedr$   r$   r%   Ú_resolve_address_nocp×  sP    



$ÿ



r°   c                      sœ  e Zd Zddœ‡ fdd„Zddœdd„Zddœdd	„Zd
dœdd„Zd
dœdd„Zeddddœdd„ƒZ	edddddœdd„ƒZ	d‰dddddœdd„Z	edddddœdd„ƒZ
eddddddœdd„ƒZ
dŠddddddœd d„Z
eejd!ƒfddd"œd#d$„Zd%dœd&d'„Zd%dd(œd)d*„Zejd+k�s:e�sJeejd,ƒ�rJddd-œd.d/„Zd0dœd1d2„Zd3d4d5dd6œd7d8„Zed9dœd:d;„ƒZed<dœd=d>„ƒZeddœd?d@„ƒZed%dœdAdB„ƒZdCdœdDdE„Zd dœdFdG„ZddœdHdI„Z d
ddJœdKdL„Z!dddMœdNdO„Z"d%dœdPdQ„Z#ddœdRdS„Z$dTdœdUdV„Z%d
ddJœdWdX„Z&d‹dddZd[œd\d]„Z'dŒd^ddd_d`œdadb„Z(d�dddcddœdedf„Z)dŽd^dddgd`œdhdi„Z*ejd+k�s¬e�sÂeejdjƒ�rÂd�ddddkdlœdmdn„Z+ejd+k�sâe�søeejdoƒ�rød�dpdddqdrœdsdt„Z,d‘d^dd_duœdvdw„Z-ed^dxddyœdzd{„ƒZ.ed^ddxdd|œd}d{„ƒZ.d~ddœd€d{„Z.ejd+k�sje�s”eejd�ƒ�r”e/ejj0d‚d‚dƒ�d’dpd„dd…dd†œd‡dˆ„ƒZ0‡  Z1S )“rf   r   r.   c                   s"   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&   rM   rf   rª   r1   ©Ú	__class__r$   r%   r&   "  s
    
ÿzSocketType.__init__rI   c                 C  s   t ‚d S r!   ©ÚNotImplementedErrorr1   r$   r$   r%   r‡   ,  s    zSocketType.detachc                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   r}   /  s    zSocketType.filenor   c                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   Úgetpeername2  s    zSocketType.getpeernamec                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   Úgetsockname5  s    zSocketType.getsockname©ÚlevelÚoptnamer    c                 C  s   d S r!   r$   ©r#   r¹   rº   r$   r$   r%   r†   8  s    zSocketType.getsockoptrt   ©r¹   rº   Úbuflenr    c                 C  s   d S r!   r$   ©r#   r¹   rº   r½   r$   r$   r%   r†   ;  s    Nr|   úint | bytesc                 C  s   t ‚d S r!   r´   r¾   r$   r$   r%   r†   >  s    úint | Buffer©r¹   rº   Úvaluer    c                 C  s   d S r!   r$   ©r#   r¹   rº   rÂ   r$   r$   r%   Ú
setsockoptF  s    zSocketType.setsockopt©r¹   rº   rÂ   Úoptlenr    c                 C  s   d S r!   r$   ©r#   r¹   rº   rÂ   rÆ   r$   r$   r%   rÄ   I  s    úint | Buffer | Nonec                 C  s   t ‚d S r!   r´   rÇ   r$   r$   r%   rÄ   R  s    é€   ©Úbacklogr    c                 C  s   t ‚d S r!   r´   ©r#   rË   r$   r$   r%   Úlisten[  s    zSocketType.listenr(   c                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   Úget_inheritable^  s    zSocketType.get_inheritable©Úinheritabler    c                 C  s   t ‚d S r!   r´   ©r#   rÐ   r$   r$   r%   Úset_inheritablea  s    zSocketType.set_inheritablerr   Úshare©Ú
process_idr    c                 C  s   t ‚d S r!   r´   ©r#   rÕ   r$   r$   r%   rÓ   h  s    zSocketType.sharer   c                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   Ú	__enter__k  s    zSocketType.__enter__r3   r4   r5   r6   c                 C  s   t ‚d S r!   r´   r:   r$   r$   r%   Ú__exit__n  s    zSocketType.__exit__r   c                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   rL   v  s    zSocketType.familyr   c                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   rM   z  s    zSocketType.typec                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   rN   ~  s    zSocketType.protoc                 C  s   t ‚dS )zBReturn True if the socket has been shut down with the SHUT_WR flagNr´   r1   r$   r$   r%   Údid_shutdown_SHUT_WR‚  s    zSocketType.did_shutdown_SHUT_WRrZ   c                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   Ú__repr__‡  s    zSocketType.__repr__c                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   ÚdupŠ  s    zSocketType.dupc                 C  s   t ‚d S r!   r´   r1   r$   r$   r%   Úclose�  s    zSocketType.close©r˜   r    c                 Ã  s   t ‚d S r!   r´   ©r#   r˜   r$   r$   r%   Úbind�  s    zSocketType.bind©Úflagr    c                 C  s   t ‚d S r!   r´   ©r#   rá   r$   r$   r%   Úshutdown“  s    zSocketType.shutdownc                 C  s   t ‚dS )zpReturn True if the socket is readable. This is checked with `select.select` on Windows, otherwise `select.poll`.Nr´   r1   r$   r$   r%   Úis_readable–  s    zSocketType.is_readablec                 Ã  s   t ‚dS )zIConvenience method that calls trio.lowlevel.wait_writable for the object.Nr´   r1   r$   r$   r%   Úwait_writableš  s    zSocketType.wait_writableú tuple[SocketType, AddressFormat]c                 Ã  s   t ‚d S r!   r´   r1   r$   r$   r%   Úacceptž  s    zSocketType.acceptc                 Ã  s   t ‚d S r!   r´   rÞ   r$   r$   r%   Úconnect¡  s    zSocketType.connectr   úAwaitable[bytes]©r½   rO   r    c                C  s   t ‚d S r!   r´   ©r#   r½   rO   r$   r$   r%   Úrecv¤  s    zSocketType.recvr   úAwaitable[int]©ÚbufferÚnbytesrO   r    c                 C  s   t ‚d S r!   r´   ©r#   rï   rð   rO   r$   r$   r%   Ú	recv_into§  s    zSocketType.recv_intoú&Awaitable[tuple[bytes, AddressFormat]]©ÚbufsizerO   r    c                C  s   t ‚d S r!   r´   ©r#   rõ   rO   r$   r$   r%   Úrecvfrom°  s    zSocketType.recvfromú$Awaitable[tuple[int, AddressFormat]]c                 C  s   t ‚d S r!   r´   rñ   r$   r$   r%   Úrecvfrom_into¹  s    zSocketType.recvfrom_intoÚrecvmsgúBAwaitable[tuple[bytes, list[tuple[int, int, bytes]], int, object]]©rõ   Ú
ancbufsizerO   r    c                C  s   t ‚d S r!   r´   ©r#   rõ   rý   rO   r$   r$   r%   rú   Å  s    zSocketType.recvmsgÚrecvmsg_intoúIterable[Buffer]ú@Awaitable[tuple[int, list[tuple[int, int, bytes]], int, object]]©Úbuffersrý   rO   r    c                C  s   t ‚d S r!   r´   ©r#   r  rý   rO   r$   r$   r%   rÿ   Ò  s    zSocketType.recvmsg_into©rt   rO   r    c                C  s   t ‚d S r!   r´   ©r#   rt   rO   r$   r$   r%   ÚsendÛ  s    zSocketType.sendú!tuple[object, ...] | str | Buffer©Údatar˜   r    c                Ã  s   d S r!   r$   ©r#   r
  r˜   r$   r$   r%   ÚsendtoÞ  s    zSocketType.sendto©r
  rO   r˜   r    c                Ã  s   d S r!   r$   ©r#   r
  rO   r˜   r$   r$   r%   r  æ  s    Úobject©r�   r    c                 Ç  s   t ‚d S r!   r´   )r#   r�   r$   r$   r%   r  ï  s    Úsendmsgr$   rk   ú!Iterable[tuple[int, int, Buffer]]úAddressFormat | None©r  ÚancdatarO   r˜   r    c                Ã  s   t ‚d S r!   r´   ©r#   r  r  rO   r˜   r$   r$   r%   r  ö  s    	zSocketType.sendmsg)N)N)r   )r   r   )r   )r   r   )r   r   )r   r   )r   )r$   r   N)2r<   r=   r>   r&   r‡   r}   r¶   r·   r   r†   rÄ   ÚminrP   Ú	SOMAXCONNrÍ   rÎ   rÒ   r„   r…   r   r¤   r~   rÓ   r×   rØ   ÚpropertyrL   rM   rN   rÙ   rÚ   rÛ   rÜ   rß   rã   rä   rå   rç   rè   rì   rò   r÷   rù   rú   rÿ   r  r  r”   r  Ú__classcell__r$   r$   r²   r%   rf   !  s¬   
 ü û	ÿ
ÿ  ü ý  üÿ
ÿ  ü	ÿ
ÿ  ü	ÿ
ÿ   ûÚ__c                   @  s‚  e Zd Zdddœdd„Zddœdd	„Zddœd
d„Zddœdd„Zddœdd„Zeddddœdd„ƒZ	edddddœdd„ƒZ	d™dddddœdd„Z	edddddœdd„ƒZ
eddddddœd d„ƒZ
dšddd!dddœd"d„Z
eejd#ƒfddd$œd%d&„Zd'dœd(d)„Zd'dd*œd+d,„Zejd-k�s8e�sHeejd.ƒ�rHddd/œd0d1„Zd2dœd3d4„Zd5d6d7dd8œd9d:„Zed;dœd<d=„ƒZed>dœd?d@„ƒZeddœdAdB„ƒZed'dœdCdD„ƒZdEdœdFdG„ZdHdœdIdJ„ZddœdKdL„Z dddMœdNdO„Z!dddPœdQdR„Z"d'dœdSdT„Z#ddœdUdV„Z$dd'ddWœdXdY„Z%dZd[d\d]d^d_œd`da„Z&e'ejj(e)j*ƒZ+dbdœdcdd„Z(dddMœdedf„Z,e�rˆd›dddhdiœdjdk„Z-e'ejj-e)j*ƒZ-e�r´dœdldddmdnœdodp„Z.e'ejj.e)j*ƒZ.e�rÞd�dddqdrœdsdt„Z/e'ejj/e)j*ƒZ/e�r
dždldddudnœdvdw„Z0e'ejj0e)j*ƒZ0ejd-k�s:e�sjeejdxƒ�rje�rVdŸddddydzœd{d|„Z1e'ejj1e)j*d}d~�Z1ejd-k�sŠe�sºeejdƒ�rºe�r¦d d€ddd�d‚œdƒd„„Z2e'ejj2e)j*d}d~�Z2e�rÔd¡dlddmd…œd†d‡„Z3e'ejj3e)j$ƒZ3edldˆdd‰œdŠd‹„ƒZ4edlddˆddŒœd�d‹„ƒZ4e5ejj4dŽdŽd��d�dd‘œd’d‹„ƒZ4ejd-k�sTe�s~eejd“ƒ�r~e5ejj6dŽdŽd��d¢d€d”dd•dd–œd—d˜„ƒZ6dS )£ri   re   r   rg   c                 C  s@   t |ƒtjur$tdt |ƒj› d�ƒ‚|| _| j d¡ d| _d S )Nz.expected object of type 'socket.socket', not 'ú'F)rM   rP   r~   rª   r<   Ú_sockÚsetblockingÚ_did_shutdown_SHUT_WR)r#   rh   r$   r$   r%   r&     s    ÿz_SocketType.__init__rI   r.   c                 C  s
   | j  ¡ S r!   )r  r‡   r1   r$   r$   r%   r‡   "  s    z_SocketType.detachc                 C  s
   | j  ¡ S r!   )r  r}   r1   r$   r$   r%   r}   %  s    z_SocketType.filenor   c                 C  s
   | j  ¡ S r!   )r  r¶   r1   r$   r$   r%   r¶   (  s    z_SocketType.getpeernamec                 C  s
   | j  ¡ S r!   )r  r·   r1   r$   r$   r%   r·   +  s    z_SocketType.getsocknamer¸   c                 C  s   d S r!   r$   r»   r$   r$   r%   r†   .  s    z_SocketType.getsockoptrt   r¼   c                 C  s   d S r!   r$   r¾   r$   r$   r%   r†   1  s    Nr|   r¿   c                 C  s&   |d u r| j  ||¡S | j  |||¡S r!   )r  r†   r¾   r$   r$   r%   r†   4  s    rÀ   rÁ   c                 C  s   d S r!   r$   rÃ   r$   r$   r%   rÄ   >  s    z_SocketType.setsockoptrÅ   c                 C  s   d S r!   r$   rÇ   r$   r$   r%   rÄ   A  s    rÈ   c                 C  sR   |d u r(|d u rt dƒ‚| j |||¡S |d ur@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Ç   r$   r$   r%   rÄ   J  s    ÿ
ÿrÉ   rÊ   c                 C  s   | j  |¡S r!   )r  rÍ   rÌ   r$   r$   r%   rÍ   `  s    z_SocketType.listenr(   c                 C  s
   | j  ¡ S r!   )r  rÎ   r1   r$   r$   r%   rÎ   c  s    z_SocketType.get_inheritablerÏ   c                 C  s   | j  |¡S r!   )r  rÒ   rÑ   r$   r$   r%   rÒ   f  s    z_SocketType.set_inheritablerr   rÓ   rÔ   c                 C  s   | j  |¡S r!   )r  rÓ   rÖ   r$   r$   r%   rÓ   m  s    z_SocketType.sharer   c                 C  s   | S r!   r$   r1   r$   r$   r%   r×   p  s    z_SocketType.__enter__r3   r4   r5   r6   c                 C  s   | j  |||¡S r!   )r  rØ   r:   r$   r$   r%   rØ   s  s    z_SocketType.__exit__r   c                 C  s   | j jS r!   )r  rL   r1   r$   r$   r%   rL   {  s    z_SocketType.familyr   c                 C  s   | j jS r!   )r  rM   r1   r$   r$   r%   rM     s    z_SocketType.typec                 C  s   | j jS r!   )r  rN   r1   r$   r$   r%   rN   ƒ  s    z_SocketType.protoc                 C  s   | j S r!   )r  r1   r$   r$   r%   rÙ   ‡  s    z _SocketType.did_shutdown_SHUT_WRrZ   c                 C  s   t | jƒ dd¡S )Nzsocket.socketztrio.socket.socket)Úreprr  Úreplacer1   r$   r$   r%   rÚ   ‹  s    z_SocketType.__repr__rf   c                 C  s   t | j ¡ ƒS )z"Same as :meth:`socket.socket.dup`.)ri   r  rÛ   r1   r$   r$   r%   rÛ   Ž  s    z_SocketType.dupc                 C  s*   | j  ¡ dkr&tj | j ¡ | j  ¡  d S )Néÿÿÿÿ)r  r}   r/   r0   Znotify_closingrÜ   r1   r$   r$   r%   rÜ   ’  s    z_SocketType.closerÝ   c                 Ã  sj   | j |dd�I d H }ttdƒrJ| jtjkrJ|d rJtj | jj	|¡I d H S tj
 ¡ I d H  | j 	|¡S d S )NT©r™   rœ   r   )r°   r¤   rP   rL   rœ   r/   r^   r_   r  rß   r0   Ú
checkpointrÞ   r$   r$   r%   rß   —  s    ÿ
þýz_SocketType.bindrà   c                 C  s&   | j  |¡ |tjtjfv r"d| _d S )NT)r  rã   rP   ÚSHUT_WRÚ	SHUT_RDWRr  râ   r$   r$   r%   rã   ©  s    z_SocketType.shutdownc                 C  sR   t jdkr,t | jgg g d¡\}}}t|ƒS t ¡ }| | jtj¡ t| d¡ƒS )Nrr   r   )r„   r…   Úselectr  r(   ÚpollÚregisterÚPOLLIN)r#   Úrreadyr®   Úpr$   r$   r%   rä   °  s    
z_SocketType.is_readablec                 Ã  s   t  | j¡I d H  d S r!   )r   rå   r  r1   r$   r$   r%   rå   ¹  s    z_SocketType.wait_writable)r˜   r™   r    c                Ã  sD   | j tjkr | j tjtj¡}nd}t| j| j | j	|||d�I d H S )NF)r—   r˜   r™   )
rL   rP   r£   r  r†   ÚIPPROTO_IPV6ÚIPV6_V6ONLYr°   rM   rN   )r#   r˜   r™   r—   r$   r$   r%   r°   ¼  s    þúz!_SocketType._resolve_address_nocpr‰   rˆ   r�   rŽ   r   )r‹   rŠ   r�   r�   r    c              	   Ï  s–   t ƒ 4 I d H š. || jg|¢R i |¤ŽW  d   ƒI d H  S 1 I d H sH0    Y  || jƒI d H  z|| jg|¢R i |¤ŽW S  tyŽ   Y qR0 qRd S r!   )r   r  r,   )r#   r‹   rŠ   r�   r�   r$   r$   r%   r‘   Ø  s    Bz_SocketType._nonblocking_helperræ   c                 Ã  s   |   ¡ I dH \}}t|ƒ|fS )z-Like :meth:`socket.socket.accept`, but async.N)Ú_acceptrj   )r#   rh   Úaddrr$   r$   r%   rç     s    z_SocketType.acceptc              	   Ã  sÎ   zr| j |dd�I d H }tƒ 4 I d H š$ | j |¡W  d   ƒI d H  W S 1 I d H sT0    Y  t | j¡I d H  W n  tjy’   | j ¡  ‚ Y n0 | j 	t
jt
j¡}|dkrÊt|d|›dt |¡› �ƒ‚d S )NFr#  r   zError connecting to z: )r°   r   r  rè   r   rå   r/   Z	CancelledrÜ   r†   rP   rƒ   ÚSO_ERRORr©   r¥   Ústrerror)r#   r˜   Úerrr$   r$   r%   rè     s    08
z_SocketType.connectr   ré   rê   c                C  s   d S r!   r$   rë   r$   r$   r%   rì   `  ó    z_SocketType.recvr   rí   rî   c                C  s   d S r!   r$   rñ   r$   r$   r%   rò   m  s    z_SocketType.recv_intoró   rô   c                C  s   d S r!   r$   rö   r$   r$   r%   r÷   €  s    z_SocketType.recvfromrø   c                C  s   d S r!   r$   rñ   r$   r$   r%   rù   ’  s    z_SocketType.recvfrom_intorú   rû   rü   c                C  s   d S r!   r$   rþ   r$   r$   r%   rú   ¨  s    z_SocketType.recvmsgT)rŒ   rÿ   r   r  r  c                C  s   d S r!   r$   r  r$   r$   r%   rÿ   ¿  s    z_SocketType.recvmsg_intor  c                C  s   d S r!   r$   r  r$   r$   r%   r  Ó  r4  z_SocketType.sendr  r	  c                Ã  s   d S r!   r$   r  r$   r$   r%   r  Þ  s    z_SocketType.sendtor  c                Ã  s   d S r!   r$   r  r$   r$   r%   r  æ  s    r$   rk   r  r  c                 Ç  sD   t |ƒ}| j|d dd�I dH |d< | jtjtjjg|¢R Ž I dH S )z3Similar to :meth:`socket.socket.sendto`, but async.r"  Fr#  N)r­   r°   r‘   r   rå   rP   r~   r  )r#   r�   Z	args_listr$   r$   r%   r  ï  s    þýr  r  r  r  c                Ã  s<   |dur| j |dd�I dH }|  tjtjj||||¡I dH S )z©Similar to :meth:`socket.socket.sendmsg`, but async.

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

            NFr#  )r°   r‘   r   rå   rP   r~   r  r  r$   r$   r%   r    s    úz_SocketType.sendmsg)N)N)r   )r   r   )r   )r   r   )r   r   )r   r   )r   )r$   r   N)7r<   r=   r>   r&   r‡   r}   r¶   r·   r   r†   rÄ   r  rP   r  rÍ   rÎ   rÒ   r„   r…   r   r¤   r~   rÓ   r×   rØ   r  rL   rM   rN   rÙ   rÚ   rÛ   rÜ   rß   rã   rä   rå   r°   r‘   r–   rç   r   Zwait_readabler/  rè   rì   rò   r÷   rù   rú   rÿ   r  r  r”   r  r$   r$   r$   r%   ri     s   ü
 ûÿ
ÿ	*þ	Nþ	  ûþ	 ýþ	  ûþ	ÿ
ÿ  üý
ÿ
ÿ  üý
þ	ÿ
ÿ   ûri   )r   r   r   r   )F)SÚ
__future__r   r¥   r'  r~   rP   r„   Úoperatorr   r   r   Útypingr   r   r   r	   r
   r   Úidnar]   r/   Z
trio._utilr   r”   r�   r   Úcollections.abcr   r   r   Útypesr   Ztyping_extensionsr   r   r   r   r   Ú_abcr   r   r   r   r   Ú__annotations__r   ZRunVarr@   rB   rF   rG   ÚAI_NUMERICHOSTrY   ÚgetattrrX   rb   rd   rj   rp   rŸ   ÚSOCK_STREAMr…   r¤   rs   rI   rv   rw   rx   ry   ro   Z_SOCK_TYPE_MASKr–   r°   rf   Ú__dict__Úitemsrc   ÚobjÚ
startswithr•   Zstdlib_typeZ
stdlib_objri   r$   r$   r$   r%   Ú<module>   s¨    	$"#    úSüÿÿýü*

ÿÿ	 ý'J c
