o
    ~Zhv                     @  s  d dl mZ d dlZd dlmZ d dlmZmZ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 d d
lmZmZ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#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-Z2G d!d" d"ee) e-Z3G d#d$ d$ee' e-Z4dS )%    )annotationsN)abstractmethod)Callable
CollectionMapping)AsyncExitStack)IOBase)IPv4AddressIPv6Address)AddressFamily)TracebackType)AnyTypeVarUnion   )TypedAttributeProviderTypedAttributeSettyped_attribute   )
ByteStreamListenerUnreliableObjectStream)	TaskGroupT_Retvalc                   @  s    e Zd ZdddZdddZdS )_NullAsyncContextManagerreturnNonec                      d S N selfr   r   I/var/www/html/lang_env/lib/python3.10/site-packages/anyio/abc/_sockets.py
__aenter__   s   z#_NullAsyncContextManager.__aenter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonebool | Nonec                   r   r   r   )r!   r$   r&   r(   r   r   r"   	__aexit__!   s   z"_NullAsyncContextManager.__aexit__N)r   r   )r$   r%   r&   r'   r(   r)   r   r*   )__name__
__module____qualname__r#   r+   r   r   r   r"   r      s    
r   c                   @  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)r,   r-   r.   r   r0   __annotations__r2   r4   r6   r7   r8   r   r   r   r"   r/   *   s   
 r/   c                   @  s,   e Zd Zed	ddZeed
ddZdS )_SocketProviderr   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 r   )_raw_socketr0   r   r    r   r"   <lambda>?   s    z2_SocketProvider.extra_attributes.<locals>.<lambda>c                     s    j  S r   r=   getsocknamer   )convertr!   r   r"   r>   @   s    c                     s    j S r   )r=   r   r    r   r"   r>   C       c                         S r   r   r   )peernamer   r"   r>   L       c                     s    j  d S )Nr   r?   r   r    r   r"   r>   Q   s    r   c                     rC   r   r   r   )r8   r   r"   r>   U   rE   )Z_core._socketsr<   r/   r0   r2   r6   r=   getpeernameOSErrorr7   r   AF_INETAF_INET6r4   r8   )r!   
attributesr   )rA   rD   r8   r!   r"   extra_attributes:   s&   
z _SocketProvider.extra_attributesr5   c                 C  s   d S r   r   r    r   r   r"   r=   Y   s   z_SocketProvider._raw_socketN)r   r;   )r   r5   )r,   r-   r.   propertyrK   r   r=   r   r   r   r"   r:   9   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"   rN   _       rN   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   r   c                      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!   rS   rU   r   r   r"   send_fdsh   rB   zUNIXSocketStream.send_fdsmsglenr3   maxfdstuple[bytes, list[int]]c                   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_fdsr   rB   zUNIXSocketStream.receive_fdsN)rS   rT   rU   rV   r   r   )rY   r3   rZ   r3   r   r[   )r,   r-   r.   r   rX   r\   r   r   r   r"   rR   g   s
    	rR   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   rN   c                   rW   )zAccept an incoming connection.Nr   r    r   r   r"   accept   rB   zSocketListener.acceptNhandlerCallable[[SocketStream], Any]
task_groupTaskGroup | Noner   c              	     sp   ddl m} t 4 I d H }|d u r|| I d H }	 |  I d H }||| q1 I d H s1w   Y  d S )Nr   )create_task_group) rc   r   enter_async_contextr^   Z
start_soon)r!   r_   ra   rc   stackstreamr   r   r"   serve   s   zSocketListener.serve)r   rN   r   )r_   r`   ra   rb   r   r   )r,   r-   r.   rP   r   r^   rh   r   r   r   r"   r]   }   s    r]   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`.
    datarT   hoststrportr3   r   r   c                   s   |  |||ffI dH S )z^
        Alias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).

        Nsend)r!   rj   rk   rm   r   r   r"   sendto   s   zUDPSocket.sendtoN)rj   rT   rk   rl   rm   r3   r   r   r,   r-   r.   rP   rp   r   r   r   r"   ri      s    ri   c                   @  rM   )ConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrO   r   r   r   r"   rr      rQ   rr   c                   @  s   e Zd ZdZddd	Zd
S )UNIXDatagramSocketz
    Represents an unconnected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    rj   rT   pathrl   r   r   c                   s   |  ||fI dH S )zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).Nrn   )r!   rj   rt   r   r   r"   rp      s   zUNIXDatagramSocket.sendtoN)rj   rT   rt   rl   r   r   rq   r   r   r   r"   rs      s    rs   c                   @  rM   )ConnectedUNIXDatagramSocketz
    Represents a connected Unix datagram socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrO   r   r   r   r"   ru      rQ   ru   )5
__future__r   socketabcr   collections.abcr   r   r   
contextlibr   ior   	ipaddressr	   r
   r   typesr   typingr   r   r   Z_core._typedattrr   r   r   Z_streamsr   r   r   _tasksr   rl   ZIPAddressTypetupler3   ZIPSockAddrTyper1   rT   ZUDPPacketTypeZUNIXDatagramPacketTyper   r   r/   r:   rN   rR   r]   ri   rr   rs   ru   r   r   r   r"   <module>   s>    &
