o
    #6d{                     @  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)   iC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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:   )Z_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'   propertyr@   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*   rC   X       rC   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   rH   rJ   r)   r)   r*   send_fdsa   r7   zUNIXSocketStream.send_fdsmsglenr   maxfdstuple[bytes, list[int]]c                   rM   )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   rO   rP   r)   r)   r*   receive_fdsk   r7   zUNIXSocketStream.receive_fdsN)rH   rI   rJ   rK   r,   rL   )rO   r   rP   r   r,   rQ   )r%   r&   r'   r   rN   rR   r)   r)   r)   r*   rG   `   s
    	rG   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,   rC   c                   rM   )zAccept an incoming connection.Nr)   r1   r)   r)   r*   accept}   r7   zSocketListener.acceptNhandlerCallable[[SocketStream], Any]
task_groupTaskGroup | NonerL   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   rT   Z
start_soon)r2   rU   rW   Z
exit_stackstreamr)   r)   r*   serve   s   zSocketListener.serve)r,   rC   r/   )rU   rV   rW   rX   r,   rL   )r%   r&   r'   rE   r   rT   r[   r)   r)   r)   r*   rS   v   s    rS   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`.
    datarI   hoststrportr   r,   rL   c                   s   |  |||ffI dH S )zKAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).N)send)r2   r]   r^   r`   r)   r)   r*   sendto   s   zUDPSocket.sendtoN)r]   rI   r^   r_   r`   r   r,   rL   )r%   r&   r'   rE   rb   r)   r)   r)   r*   r\      s    r\   c                   @  rB   )ConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrD   r)   r)   r)   r*   rc      rF   rc   )0
__future__r   socketabcr   
contextlibr   ior   	ipaddressr   r   r   typingr	   r
   r   r   r   r   r   Z_core._tasksr   Z_core._typedattrr   r   r   Z_streamsr   r   r   _tasksr   r_   ZIPAddressTyper   ZIPSockAddrTyper   rI   ZUDPPacketTyper   r   r+   rC   rG   rS   r\   rc   r)   r)   r)   r*   <module>   s0    $
&