o
    >Zcz                     @   s  d dl 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
 d dlmZmZmZmZmZmZmZmZmZmZmZmZ dd	lmZmZmZ d
dlmZ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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-Z0G dd de e) e-Z1G dd de e( e-Z2dS )    N)abstractmethod)IOBase)IPv4AddressIPv6Address)AddressFamily)TracebackType)AnyAsyncContextManagerCallable
CollectionDictListMappingOptionalTupleTypeTypeVarUnion   )TypedAttributeProviderTypedAttributeSettyped_attribute   )
ByteStreamListenerT_StreamUnreliableObjectStream)	TaskGroupT_Retvalc                	   @   sD   e Zd Zd
ddZdeee  dee dee dee fdd	Z	dS )_NullAsyncContextManagerreturnNc                       d S N selfr#   r#   H/var/www/chikooza/env/lib/python3.10/site-packages/anyio/abc/_sockets.py
__aenter__&   s   z#_NullAsyncContextManager.__aenter__exc_typeexc_valexc_tbc                    r!   r"   r#   )r%   r(   r)   r*   r#   r#   r&   	__aexit__)   s   z"_NullAsyncContextManager.__aexit__)r    N)
__name__
__module____qualname__r'   r   r   BaseExceptionr   boolr+   r#   r#   r#   r&   r   %   s    

r   c                   @   sd   e Zd ZU e Zeed< e Zeed< e Z	e
ed< e Zejed< e Zeed< e Ze
ed< dS )SocketAttributefamilylocal_address
local_port
raw_socketremote_addressremote_portN)r,   r-   r.   r   r2   r   __annotations__r3   SockAddrTyper4   intr5   socketr6   r7   r#   r#   r#   r&   r1   2   s   
 r1   c                   @   sF   e Zd Zedeeeg ef f fddZeede	j	fddZ
dS )_SocketProviderr    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 r"   )_raw_socketr2   r#   r$   r#   r&   <lambda>G   s    z2_SocketProvider.extra_attributes.<locals>.<lambda>c                      s    j  S r"   r>   getsocknamer#   )convertr%   r#   r&   r?   H   s    c                      s    j S r"   )r>   r#   r$   r#   r&   r?   K       c                          S r"   r#   r#   )peernamer#   r&   r?   V       c                      s    j  d S )Nr   r@   r#   r$   r#   r&   r?   \   s    r   c                      rD   r"   r#   r#   )r7   r#   r&   r?   _   rF   )_core._socketsr=   r1   r2   r3   r5   r>   getpeernameOSErrorr6   r   AF_INETAF_INET6r4   r7   )r%   
attributesr#   )rB   rE   r7   r%   r&   extra_attributesB   s.   
z _SocketProvider.extra_attributesc                 C   s   d S r"   r#   r$   r#   r#   r&   r>   c   s   z_SocketProvider._raw_socketN)r,   r-   r.   propertyr   r   r
   rM   r   r;   r>   r#   r#   r#   r&   r<   A   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&   rP   i       rP   c                
   @   sX   e Zd Zededeeeef  ddfddZ	ededede
eee f fd	d
ZdS )UNIXSocketStreammessagefdsr    Nc                       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#   )r%   rU   rV   r#   r#   r&   send_fdsr   rC   zUNIXSocketStream.send_fdsmsglenmaxfdsc                    rW   )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#   )r%   rY   rZ   r#   r#   r&   receive_fds~   rC   zUNIXSocketStream.receive_fds)r,   r-   r.   r   bytesr   r   r:   r   rX   r   r   r[   r#   r#   r#   r&   rT   q   s    (rT   c                   @   sJ   e Zd ZdZedefddZ	d
deege	f de
e ddfdd	ZdS )SocketListenerz}
    Listens to incoming socket connections.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    r    c                    rW   )zAccept an incoming connection.Nr#   r$   r#   r#   r&   accept   rC   zSocketListener.acceptNhandler
task_groupc              	      sn   ddl m} |d u r|  }}nt }|4 I d H  	 |  I d H }||| q1 I d H s0w   Y  d S )Nr   )create_task_group) ra   r   r^   
start_soon)r%   r_   r`   ra   context_managerstreamr#   r#   r&   serve   s   zSocketListener.server"   )r,   r-   r.   rR   r   rP   r^   r
   r   r   r   r   rf   r#   r#   r#   r&   r]      s    r]   c                   @   s*   e Zd ZdZdedededdfddZdS )		UDPSocketz{
    Represents an unconnected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    datahostportr    Nc                    s   |  |||ffI dH S )zKAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).N)send)r%   rh   ri   rj   r#   r#   r&   sendto   s   zUDPSocket.sendto)r,   r-   r.   rR   r\   strr:   rl   r#   r#   r#   r&   rg      s    rg   c                   @   rO   )ConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrQ   r#   r#   r#   r&   rn      rS   rn   )3r;   abcr   ior   	ipaddressr   r   r   typesr   typingr   r	   r
   r   r   r   r   r   r   r   r   r   _core._typedattrr   r   r   _streamsr   r   r   r   _tasksr   rm   IPAddressTyper:   IPSockAddrTyper9   r\   UDPPacketTyper   r   r1   r<   rP   rT   r]   rg   rn   r#   r#   r#   r&   <module>   s.    8(