o
    OÊÆh{  ã                   @  sz  d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZmZmZmZmZmZmZ d	d
lmZ d	dlmZmZmZ ddlmZmZmZ ddlm Z  ee!e
ef Z"ee!e#f Z$ee$e!f Z%ee&e$f Z'edƒZ(G dd„ deƒZ)G dd„ deƒZ*G dd„ dee*ƒZ+G dd„ de+ƒZ,G dd„ dee+ e*ƒZ-G dd„ dee' e*ƒZ.G dd„ dee& e*ƒZ/dS )é    )ÚannotationsN)Úabstractmethod)ÚAsyncExitStack)ÚIOBase)ÚIPv4AddressÚIPv6Address)ÚAddressFamily)ÚAnyÚCallableÚ
CollectionÚMappingÚTupleÚTypeVarÚUnioné   )Úcreate_task_group)ÚTypedAttributeProviderÚTypedAttributeSetÚtyped_attributeé   )Ú
ByteStreamÚListenerÚUnreliableObjectStream)Ú	TaskGroupÚT_Retvalc                   @  sb   e Zd ZU eƒ Zded< eƒ Zded< eƒ Zded< eƒ Zded< eƒ Z	ded	< eƒ Z
ded
< dS )ÚSocketAttributer   ÚfamilyÚSockAddrTypeÚlocal_addressÚintÚ
local_portúsocket.socketÚ
raw_socketÚremote_addressÚremote_portN)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   r    r"   r#   r$   © r)   r)   ú_/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/anyio/abc/_sockets.pyr   #   s   
 r   c                   @  s,   e Zd Zed	dd„ƒZeed
dd„ƒƒZdS )Ú_SocketProviderÚreturnúMapping[Any, Callable[[], Any]]c                   sÌ   ddl m‰  tj‡fdd„tj‡ ‡fdd„tj‡fdd„i}z	ˆ ˆj ¡ ƒ‰W n ty2   d ‰Y nw ˆd ur@‡fdd„|tj	< ˆjjt
jt
jfv rd‡fdd„|tj< ˆd urdˆd	 ‰‡fd
d„|tj< |S )Nr   )Úconvert_ipv6_sockaddrc                     s   ˆ j jS ©N)Ú_raw_socketr   r)   ©Úselfr)   r*   Ú<lambda>8   s    z2_SocketProvider.extra_attributes.<locals>.<lambda>c                     s   ˆ ˆj  ¡ ƒS r/   ©r0   Úgetsocknamer)   )Úconvertr2   r)   r*   r3   9   s    ÿc                     s   ˆ j S r/   )r0   r)   r1   r)   r*   r3   <   ó    c                     ó   ˆ S r/   r)   r)   )Úpeernamer)   r*   r3   E   ó    c                     s   ˆ j  ¡ d S )Nr   r4   r)   r1   r)   r*   r3   K   s    r   c                     r8   r/   r)   r)   )r$   r)   r*   r3   N   r:   )Ú_core._socketsr.   r   r   r   r"   r0   ÚgetpeernameÚOSErrorr#   r   ÚAF_INETÚAF_INET6r    r$   )r2   Ú
attributesr)   )r6   r9   r$   r2   r*   Úextra_attributes3   s*   ûÿ
þÿz _SocketProvider.extra_attributesr!   c                 C  s   d S r/   r)   r1   r)   r)   r*   r0   R   s   z_SocketProvider._raw_socketN)r,   r-   )r,   r!   )r%   r&   r'   ÚpropertyrA   r   r0   r)   r)   r)   r*   r+   2   s    r+   c                   @  ó   e Zd ZdZdS )ÚSocketStreamzu
    Transports bytes over a socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    N©r%   r&   r'   Ú__doc__r)   r)   r)   r*   rD   X   ó    rD   c                   @  s(   e Zd Zeddd„ƒZeddd„ƒZdS )ÚUNIXSocketStreamÚmessageÚbytesÚfdsúCollection[int | IOBase]r,   ÚNonec                 Ã  ó   �dS )zð
        Send file descriptors along with a message to the peer.

        :param message: a non-empty bytestring
        :param fds: a collection of files (either numeric file descriptors or open file or socket
            objects)
        Nr)   )r2   rI   rK   r)   r)   r*   Úsend_fdsa   r7   zUNIXSocketStream.send_fdsÚmsglenr   Úmaxfdsútuple[bytes, list[int]]c                 Ã  rN   )a  
        Receive file descriptors along with a message from the peer.

        :param msglen: length of the message to expect from the peer
        :param maxfds: maximum number of file descriptors to expect from the peer
        :return: a tuple of (message, file descriptors)
        Nr)   )r2   rP   rQ   r)   r)   r*   Úreceive_fdsk   r7   zUNIXSocketStream.receive_fdsN)rI   rJ   rK   rL   r,   rM   )rP   r   rQ   r   r,   rR   )r%   r&   r'   r   rO   rS   r)   r)   r)   r*   rH   `   s
    	rH   c                   @  s,   e Zd ZdZeddd„ƒZ	dddd„ZdS )ÚSocketListenerz}
    Listens to incoming socket connections.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r,   rD   c                 Ã  rN   )zAccept an incoming connection.Nr)   r1   r)   r)   r*   Úaccept}   r7   zSocketListener.acceptNÚhandlerúCallable[[SocketStream], Any]Ú
task_groupúTaskGroup | NonerM   c              	   Ã  sd   �t ƒ 4 I d H š}|d u r| tƒ ¡I d H }	 |  ¡ I d H }| ||¡ q1 I d H s+w   Y  d S r/   )r   Úenter_async_contextr   rU   Ú
start_soon)r2   rV   rX   Ú
exit_stackÚstreamr)   r)   r*   Úserve�   s   €þüzSocketListener.serve)r,   rD   r/   )rV   rW   rX   rY   r,   rM   )r%   r&   r'   rF   r   rU   r^   r)   r)   r)   r*   rT   v   s    ýrT   c                   @  s   e Zd ZdZdd
d„ZdS )Ú	UDPSocketz{
    Represents an unconnected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    ÚdatarJ   ÚhostÚstrÚportr   r,   rM   c                 Ã  s   �|   |||ff¡I dH S )zKAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).N)Úsend)r2   r`   ra   rc   r)   r)   r*   Úsendto–   s   €zUDPSocket.sendtoN)r`   rJ   ra   rb   rc   r   r,   rM   )r%   r&   r'   rF   re   r)   r)   r)   r*   r_   �   s    r_   c                   @  rC   )ÚConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrE   r)   r)   r)   r*   rf   ›   rG   rf   )0Ú
__future__r   ÚsocketÚabcr   Ú
contextlibr   Úior   Ú	ipaddressr   r   r   Útypingr	   r
   r   r   r   r   r   Ú_core._tasksr   Ú_core._typedattrr   r   r   Ú_streamsr   r   r   Ú_tasksr   rb   ÚIPAddressTyper   ÚIPSockAddrTyper   rJ   ÚUDPPacketTyper   r   r+   rD   rH   rT   r_   rf   r)   r)   r)   r*   Ú<module>   s0    $
&