
    +h{                       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e      Z) G d de      Z* G d dee*      Z+ G d de+      Z, G d dee+   e*      Z- G d dee'   e*      Z. G d dee&   e*      Z/y)    )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                      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
<   y)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&        E/var/www/html/venv/lib/python3.12/site-packages/anyio/abc/_sockets.pyr   r   #   sP    +-FM-"1"3M<3%'J' / 1J1#2#4NL4&(K(r,   r   c                  :    e Zd Zedd       Zeedd              Zy)_SocketProviderc                    ddl m t        j                   fdt        j                   fdt        j
                   fdi}	   j                  j                               fd|t        j                  <    j                  j                  t        j                  t        j                  fv r3 fd|t        j                  <   d   fd	|t        j                  <   |S # t        $ r d Y w xY w)
Nr   )convert_ipv6_sockaddrc                 0     j                   j                  S N)_raw_socketr   selfs   r-   <lambda>z2_SocketProvider.extra_attributes.<locals>.<lambda>8   s    D,<,<,C,C r,   c                 D      j                   j                               S r3   r4   getsockname)convertr6   s   r-   r7   z2_SocketProvider.extra_attributes.<locals>.<lambda>9   s    7  ,,.4 r,   c                      j                   S r3   )r4   r5   s   r-   r7   z2_SocketProvider.extra_attributes.<locals>.<lambda><   s    0@0@ r,   c                      S r3   r+   )peernames   r-   r7   z2_SocketProvider.extra_attributes.<locals>.<lambda>E   s     r,   c                 >     j                   j                         d   S )Nr   r9   r5   s   r-   r7   z2_SocketProvider.extra_attributes.<locals>.<lambda>K   s    ((446q9 r,   r   c                      S r3   r+   )r&   s   r-   r7   z2_SocketProvider.extra_attributes.<locals>.<lambda>N   s    + r,   )_core._socketsr1   r   r   r    r$   r4   getpeernameOSErrorr%   r	   AF_INETAF_INET6r"   r&   )r6   
attributesr;   r>   r&   s   ` @@@r-   extra_attributesz _SocketProvider.extra_attributes3   s    E ""$C)) , &&(@4

	/6t7G7G7S7S7U/VH
 9IJ556 ""}'<'<m>T>T&UU : ** #&qk:M
?667!  	H	s    C+ +C98C9c                     y r3   r+   r5   s    r-   r4   z_SocketProvider._raw_socketR   s     	r,   N)returnzMapping[Any, Callable[[], Any]])rI   r#   )r'   r(   r)   propertyrG   r   r4   r+   r,   r-   r/   r/   2   s0     <   r,   r/   c                      e Zd ZdZy)SocketStreamzu
    Transports bytes over a socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    Nr'   r(   r)   __doc__r+   r,   r-   rL   rL   X       r,   rL   c                  0    e Zd Zedd       Zedd       Zy)UNIXSocketStreamc                   K   yw)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+   )r6   messagefdss      r-   send_fdszUNIXSocketStream.send_fdsa           c                   K   yw)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+   )r6   msglenmaxfdss      r-   receive_fdszUNIXSocketStream.receive_fdsk   rV   rW   N)rS   bytesrT   zCollection[int | IOBase]rI   None)rY   r!   rZ   r!   rI   ztuple[bytes, list[int]])r'   r(   r)   r   rU   r[   r+   r,   r-   rQ   rQ   `   s(       r,   rQ   c                  8    e Zd ZdZedd       Z	 d	 	 	 	 	 ddZy)SocketListenerz}
    Listens to incoming socket connections.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                   K   yw)zAccept an incoming connection.Nr+   r5   s    r-   acceptzSocketListener.accept}   rV   rW   Nc                  K   t               4 d {   }|!|j                  t                      d {   }	 | j                          d {   }|j	                  ||       +7 S7 27 # 1 d {  7  sw Y   y xY wwr3   )r   enter_async_contextr   ra   
start_soon)r6   handler
task_group
exit_stackstreams        r-   servezSocketListener.serve   s|     
 "# 	7 	7z!#-#A#ABSBU#VV
#{{},%%gv6 		7V -	7 	7 	7sT   B A%B A+A'A+A)A+%B 'A+)A++A=1A42A=9B )rI   rL   r3   )re   zCallable[[SocketStream], Any]rf   zTaskGroup | NonerI   r]   )r'   r(   r)   rN   r   ra   ri   r+   r,   r-   r_   r_   v   sA     - - (,7.7 %7 
	7r,   r_   c                      e Zd ZdZddZy)	UDPSocketz{
    Represents an unconnected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    c                H   K   | j                  |||ff       d{   S 7 w)zKAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).N)send)r6   datahostports       r-   sendtozUDPSocket.sendto   s$     YYtTl34444s   " "N)rn   r\   ro   strrp   r!   rI   r]   )r'   r(   r)   rN   rq   r+   r,   r-   rk   rk      s    5r,   rk   c                      e Zd ZdZy)ConnectedUDPSocketzy
    Represents an connected UDP socket.

    Supports all relevant extra attributes from :class:`~SocketAttribute`.
    NrM   r+   r,   r-   rt   rt      rO   r,   rt   )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   rr   IPAddressTyper!   IPSockAddrTyper   r\   UDPPacketTyper   r   r/   rL   rQ   r_   rk   rt   r+   r,   r-   <module>r      s    "   %  .     - 
 C B c;34sCx^S()e^+,:)' )#, #L: | ,7Xl+_ 72	5&}5 	5/6 r,   