ó
    EñiD3  ã                  ó„  • % S SK Jr  S SKrS SKrS SKJr  S SKJrJrJ	r	  S SK
Jr  S SKJr  S SKJrJr  S SKJr  S S	KJrJrJr  S
SKJr  S
SKJrJrJr  SSKJrJrJr  SSK J!r!  \"\-  \-  r#S\$S'   \%\"\&4   r'S\$S'   \'\"-  r(S\$S'   \%\)\'4   r*S\$S'   \%\)\"4   r+S\$S'   \" S5      r,\RZ                  4SSS.           S,S jjjr. " S S\5      r/ " S S\5      r0 " S S\\05      r1 " S  S!\15      r2 " S" S#\\1   \05      r3 " S$ S%\\*   \05      r4 " S& S'\\)   \05      r5 " S( S)\\+   \05      r6 " S* S+\\)   \05      r7g)-é    )ÚannotationsN)Úabstractmethod)ÚCallableÚ
CollectionÚMapping)ÚAsyncExitStack)ÚIOBase)ÚIPv4AddressÚIPv6Address)ÚAddressFamily)ÚAnyÚ	TypeAliasÚTypeVaré   )Úget_async_backend)ÚTypedAttributeProviderÚTypedAttributeSetÚtyped_attributeé   )Ú
ByteStreamÚListenerÚUnreliableObjectStream)Ú	TaskGroupr   ÚIPAddressTypeÚIPSockAddrTypeÚSockAddrTypeÚUDPPacketTypeÚUNIXDatagramPacketTypeÚT_RetvalF)Úrequire_connectedÚrequire_boundc               óÈ  • [        U [        5      (       a   [        R                  " U S9nOD[        U [        R                  5      (       a  U nO"[        S[        U 5      R                   S35      e U(       a   UR                  5         U(       af   UR                  [        R                  [        R                  4;   a  UR                  5       S   nOUR                  5       n U(       d  [        S5      eU[        R                  :w  a?  UR                  U:w  a/  [        SUR                    S	UR                  R                    35      eUR                  U:w  a/  [        S
UR                    S	UR                  R                    35      e UR'                  S5        U$ ! [         aV  nUR                  [        R
                  :X  a  [        S5      UeU(       a  [        S5      UeU(       a  [        S5      Uee S nAff = f! [         a  n[        S5      UeS nAff = f! [         a    S n GNHf = f! ["         a'    [        U [        5      (       a  UR%                  5         e f = f)N)Úfilenoz.the file descriptor does not refer to a socketzthe socket must be connectedz+the socket must be bound to a local addresszexpected an int or socket, got z insteadr   z"address family mismatch: expected z, got zsocket type mismatch: expected F)Ú
isinstanceÚintÚsocketÚOSErrorÚerrnoÚENOTSOCKÚ
ValueErrorÚ	TypeErrorÚtypeÚ__qualname__ÚgetpeernameÚfamilyÚAF_INETÚAF_INET6ÚgetsocknameÚ	AF_UNSPECÚnameÚBaseExceptionÚdetachÚsetblocking)Ú
sock_or_fdÚ	sock_typeÚaddr_familyr    r!   ÚsockÚexcÚ
bound_addrs           ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/anyio/abc/_sockets.pyÚ_validate_socketr?      s+  € ô �*œc×"Ñ"ð	Ü—=’=¨
Ñ3‰Dô 
�J¤§¡×	.Ñ	.Ø‰äØ-¬d°:Ó.>×.KÑ.KÐ-LÈHÐUó
ð 	
ð"ÞðJØ× Ñ Ô"ö ð"Ø—;‘;¤6§>¡>´6·?±?Ð"CÓCØ!%×!1Ñ!1Ó!3°AÑ!6‘Jà!%×!1Ñ!1Ó!3‘Jö Ü Ð!NÓOÐOàœ&×*Ñ*Ó*¨t¯{©{¸kÓ/IÜØ4°[×5EÑ5EÐ4FÀfØ—;‘;×#Ñ#Ð$ð&óð ð
 �9‰9˜	Ó!ÜØ1°)·.±.Ð1AÀÈÏ	É	ÏÉÐGWÐXóð ð "ð 	×Ñ�UÔØ€Køôo ó 
	Ø�y‰yœEŸN™NÓ*Ü ØDóàðö #Ü Ð!?Ó@ÀcÐIÞÜ Ð!NÓOÐUXÐXàûð
	ûô, ó JÜ Ð!?Ó@ÀcÐIûðJûô ó "Ø!“
ð"ûô  ó ä�j¤#×&Ñ&Ø�K‰KŒMàðúsz   —F Á1H0 Á9G? Â	H0 ÂAH ÃH0 ÃH Ã#B%H0 Æ
G<Æ&AG7Ç7G<Ç?
HÈ	HÈHÈH0 ÈH-È)H0 È,H-È-H0 È01I!c                  óª   • \ rS rSr% Sr\" 5       rS\S'   \" 5       rS\S'   \" 5       r	S\S'   \" 5       r
S	\S
'   \" 5       rS\S'   \" 5       rS\S'   Srg)ÚSocketAttributeéc   a±  
.. attribute:: family
    :type: socket.AddressFamily

    the address family of the underlying socket

.. attribute:: local_address
    :type: tuple[str, int] | str

    the local address the underlying socket is connected to

.. attribute:: local_port
    :type: int

    for IP based sockets, the local port the underlying socket is bound to

.. attribute:: raw_socket
    :type: socket.socket

    the underlying stdlib socket object

.. attribute:: remote_address
    :type: tuple[str, int] | str

    the remote address the underlying socket is connected to

.. attribute:: remote_port
    :type: int

    for IP based sockets, the remote port the underlying socket is connected to
r   r/   r   Úlocal_addressr%   Ú
local_portúsocket.socketÚ
raw_socketÚremote_addressÚremote_port© N)Ú__name__Ú
__module__r-   Ú__firstlineno__Ú__doc__r   r/   Ú__annotations__rC   rD   rF   rG   rH   Ú__static_attributes__rI   ó    r>   rA   rA   c   sX   ‡ ññ@ ,Ó-€FˆMÓ-Ù"1Ó"3€M�<Ó3Ù%Ó'€J�Ó'Ù /Ó 1€J�Ó1Ù#2Ó#4€N�LÓ4Ù&Ó(€K�Ö(rP   rA   c                  óF   • \ rS rSr\SS j5       r\\SS j5       5       rSrg)Ú_SocketProvideréŒ   c                ó  ^ ^^^• SSK Jm  [        R                  U 4S j[        R                  UU 4S j[        R
                  U 4S j0n T" T R                  R                  5       5      mTb  U4S jU[        R                  '   T R                  R                  [        R                  [        R                  4;   a6  U 4S jU[        R                  '   Tb  TS   mU4S	 jU[        R                  '   U$ ! [         a    S m N˜f = f)
Nr   )Úconvert_ipv6_sockaddrc                 ó0   >• T R                   R                  $ ©N)Ú_raw_socketr/   ©Úselfs   €r>   Ú<lambda>Ú2_SocketProvider.extra_attributes.<locals>.<lambda>’   s   ø€ ¨D×,<Ñ,<×,CÒ,CrP   c                 óD   >• T " TR                   R                  5       5      $ rW   ©rX   r2   )ÚconvertrZ   s   €€r>   r[   r\   “   s   ø€ ±7Ø× Ñ ×,Ñ,Ó.ô4rP   c                 ó   >• T R                   $ rW   )rX   rY   s   €r>   r[   r\   –   s   ø€ °×0@Ò0@rP   c                 ó   >• T $ rW   rI   )Úpeernames   €r>   r[   r\   Ÿ   s   ø€ ÁrP   c                 ó>   >• T R                   R                  5       S   $ )Nr   r^   rY   s   €r>   r[   r\   £   s   ø€ Ø× Ñ ×,Ñ,Ó.¨qÒ1rP   r   c                 ó   >• T $ rW   rI   )rH   s   €r>   r[   r\   ¨   s   ø€ Á+rP   )Ú_core._socketsrU   rA   r/   rC   rF   rX   r.   r'   rG   r   r0   r1   rD   rH   )rZ   Ú
attributesr_   rb   rH   s   ` @@@r>   Úextra_attributesÚ _SocketProvider.extra_attributes�   sã   û€ åEô ×"Ñ"Ô$CÜ×)Ñ)õ ,ô ×&Ñ&Ô(@ð4
ˆ
ð	Ù/6°t×7GÑ7G×7SÑ7SÓ7UÓ/VˆHð
 ÑÜ9IˆJ”×5Ñ5Ñ6ð ×Ñ×"Ñ"¤}×'<Ñ'<¼m×>TÑ>TÐ&UÓUô6ˆJ”×1Ñ1Ñ2ð Ñ#Ø& q™k�Ü:M�
œ?×6Ñ6Ñ7àÐøô! ó 	ØŠHð	ús   Á C5 Ã5DÄDc                ó   • g rW   rI   rY   s    r>   rX   Ú_SocketProvider._raw_socket¬   s   € ð 	rP   rI   N)ÚreturnzMapping[Any, Callable[[], Any]])rk   rE   )	rJ   rK   r-   rL   Úpropertyrg   r   rX   rO   rI   rP   r>   rR   rR   Œ   s0   † Øóó ðð< Øóó ó órP   rR   c                  ó,   • \ rS rSrSr\SS j5       rSrg)ÚSocketStreamé²   zi
Transports bytes over a socket.

Supports all relevant extra attributes from :class:`~SocketAttribute`.
c              ƒ  ó‚   #   • [        U[        R                  SS9n[        5       R	                  U5      I Sh  v•N $  N7f)a  
Wrap an existing socket object or file descriptor as a socket stream.

The newly created socket wrapper takes ownership of the socket being passed in.
The existing socket must already be connected.

:param sock_or_fd: a socket object or file descriptor
:return: a socket stream

T©r    N)r?   r&   ÚSOCK_STREAMr   Úwrap_stream_socket©Úclsr8   r;   s      r>   Úfrom_socketÚSocketStream.from_socket¹   s6   é € ô   
¬F×,>Ñ,>ÐRVÑWˆÜ&Ó(×;Ñ;¸DÓA×AÐAÑAùó   ‚6?¸=¹?rI   N)r8   úsocket.socket | intrk   rn   ©rJ   rK   r-   rL   rM   Úclassmethodrv   rO   rI   rP   r>   rn   rn   ²   s   † ñð óBó óBrP   rn   c                  óP   • \ rS rSr\SS j5       r\SS j5       r\S	S j5       rSr	g)
ÚUNIXSocketStreaméÉ   c              ƒ  ó    #   • [        U[        R                  [        R                  SS9n[	        5       R                  U5      I Sh  v•N $  N7f)a"  
Wrap an existing socket object or file descriptor as a UNIX socket stream.

The newly created socket wrapper takes ownership of the socket being passed in.
The existing socket must already be connected.

:param sock_or_fd: a socket object or file descriptor
:return: a UNIX socket stream

Trq   N)r?   r&   rr   ÚAF_UNIXr   Úwrap_unix_stream_socketrt   s      r>   rv   ÚUNIXSocketStream.from_socketÊ   s@   é € ô  Øœ×*Ñ*¬F¯N©NÈdñ
ˆô 'Ó(×@Ñ@ÀÓF×FÐFÑFùó   ‚AAÁAÁAc              ƒ  ó   #   • g7f)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)
NrI   )rZ   ÚmessageÚfdss      r>   Úsend_fdsÚUNIXSocketStream.send_fdsÛ   ó   é � ùó   ‚c              ƒ  ó   #   • g7f)zö
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)
NrI   )rZ   ÚmsglenÚmaxfdss      r>   Úreceive_fdsÚUNIXSocketStream.receive_fdså   r‰   rŠ   rI   N)r8   ry   rk   r}   )r…   Úbytesr†   zCollection[int | IOBase]rk   ÚNone)rŒ   r%   r�   r%   rk   ztuple[bytes, list[int]])
rJ   rK   r-   rL   r{   rv   r   r‡   rŽ   rO   rI   rP   r>   r}   r}   É   s>   † ØóGó ðGð  óó ðð óó órP   r}   c                  ób   • \ rS rSrSr\    SS j5       r\S	S j5       r S
     SS jjr	Sr
g)ÚSocketListeneréð   zq
Listens to incoming socket connections.

Supports all relevant extra attributes from :class:`~SocketAttribute`.
c              ƒ  ó‚   #   • [        U[        R                  SS9n[        5       R	                  U5      I Sh  v•N $  N7f)zç
Wrap an existing socket object or file descriptor as a socket listener.

The newly created listener takes ownership of the socket being passed in.

:param sock_or_fd: a socket object or file descriptor
:return: a socket listener

T©r!   N)r?   r&   rr   r   Úwrap_listener_socketrt   s      r>   rv   ÚSocketListener.from_socket÷   s5   é € ô   
¬F×,>Ñ,>ÈdÑSˆÜ&Ó(×=Ñ=¸dÓC×CÐCÑCùrx   c              ƒ  ó   #   • g7f)zAccept an incoming connection.NrI   rY   s    r>   ÚacceptÚSocketListener.accept  r‰   rŠ   Nc              ƒ  ó  #   • SSK Jn  [        5        IS h  v•N nUc  UR                  U" 5       5      I S h  v•N n U R	                  5       I S h  v•N nUR                  X5        M+   NQ N2 N! , IS h  v•N  (       d  f       g = f7f)Nr   )Úcreate_task_group)Ú r�   r   Úenter_async_contextrš   Ú
start_soon)rZ   ÚhandlerÚ
task_groupr�   ÚstackÚstreams         r>   ÚserveÚSocketListener.serve  sn   é € õ
 	)ä!×#Ô# uØÑ!Ø#(×#<Ñ#<Ñ=NÓ=PÓ#Q×Q�
àØ#Ÿ{™{›}×,�Ø×%Ñ% gÔ6ñ ñ	 $áQñ -÷ $×#Ö#üsT   ‚B	—A)˜B	›A/¸A+¹A/ÁA-ÁA/Á)B	Á+A/Á-A/Á/BÁ5A8Á6BÂB	rI   )r8   ry   rk   r“   )rk   rn   rW   )r¡   zCallable[[SocketStream], Any]r¢   zTaskGroup | Nonerk   r‘   )rJ   rK   r-   rL   rM   r{   rv   r   rš   r¥   rO   rI   rP   r>   r“   r“   ð   sp   † ñð ðDà'ðDð 
óDó ðDð  ó-ó ð-ð (,ð7à.ð7ð %ð7ð 
÷	7ð 7rP   r“   c                  ó6   • \ rS rSrSr\SS j5       rSS jrSrg)	Ú	UDPSocketi  zo
Represents an unconnected UDP socket.

Supports all relevant extra attributes from :class:`~SocketAttribute`.
c              ƒ  ó‚   #   • [        U[        R                  SS9n[        5       R	                  U5      I Sh  v•N $  N7f)a  
Wrap an existing socket object or file descriptor as a UDP socket.

The newly created socket wrapper takes ownership of the socket being passed in.
The existing socket must be bound to a local address.

:param sock_or_fd: a socket object or file descriptor
:return: a UDP socket

Tr–   N)r?   r&   Ú
SOCK_DGRAMr   Úwrap_udp_socketrt   s      r>   rv   ÚUDPSocket.from_socket#  s5   é € ô   
¬F×,=Ñ,=ÈTÑRˆÜ&Ó(×8Ñ8¸Ó>×>Ð>Ñ>ùrx   c              ƒ  óF   #   • U R                  XU445      I Sh  v•N $  N7f)zN
Alias for :meth:`~.UnreliableObjectSendStream.send` ((data, (host, port))).

N©Úsend)rZ   ÚdataÚhostÚports       r>   ÚsendtoÚUDPSocket.sendto2  s#   é € ð
 —Y‘Y ¨T lÐ3Ó4×4Ð4Ñ4ùs   ‚!š›!rI   N)r8   ry   rk   r¨   )r°   r�   r±   Ústrr²   r%   rk   r‘   ©	rJ   rK   r-   rL   rM   r{   rv   r³   rO   rI   rP   r>   r¨   r¨     s    † ñð ó?ó ð?÷5rP   r¨   c                  ó,   • \ rS rSrSr\SS j5       rSrg)ÚConnectedUDPSocketi:  zm
Represents an connected UDP socket.

Supports all relevant extra attributes from :class:`~SocketAttribute`.
c              ƒ  ó‚   #   • [        U[        R                  SS9n[        5       R	                  U5      I Sh  v•N $  N7f)a&  
Wrap an existing socket object or file descriptor as a connected UDP socket.

The newly created socket wrapper takes ownership of the socket being passed in.
The existing socket must already be connected.

:param sock_or_fd: a socket object or file descriptor
:return: a connected UDP socket

Trq   N)r?   r&   rª   r   Úwrap_connected_udp_socketrt   s      r>   rv   ÚConnectedUDPSocket.from_socketA  s<   é € ô  ØÜ×ÑØ"ñ
ˆô
 'Ó(×BÑBÀ4ÓH×HÐHÑHùrx   rI   N)r8   ry   rk   r¸   rz   rI   rP   r>   r¸   r¸   :  s   † ñð óIó óIrP   r¸   c                  ó>   • \ rS rSrSr\    SS j5       rSS jrSrg)	ÚUNIXDatagramSocketiU  zy
Represents an unconnected Unix datagram socket.

Supports all relevant extra attributes from :class:`~SocketAttribute`.
c              ƒ  ó¢   #   • [        U[        R                  [        R                  5      n[	        5       R                  U5      I Sh  v•N $  N7f)z÷
Wrap an existing socket object or file descriptor as a UNIX datagram
socket.

The newly created socket wrapper takes ownership of the socket being passed in.

:param sock_or_fd: a socket object or file descriptor
:return: a UNIX datagram socket

N)r?   r&   rª   r€   r   Úwrap_unix_datagram_socketrt   s      r>   rv   ÚUNIXDatagramSocket.from_socket^  s9   é € ô   
¬F×,=Ñ,=¼v¿~¹~ÓNˆÜ&Ó(×BÑBÀ4ÓH×HÐHÑHùs   ‚AAÁAÁ	Ac              ƒ  óB   #   • U R                  X45      I Sh  v•N $  N7f)zCAlias for :meth:`~.UnreliableObjectSendStream.send` ((data, path)).Nr®   )rZ   r°   Úpaths      r>   r³   ÚUNIXDatagramSocket.sendtop  s   é € à—Y‘Y ˜|Ó,×,Ð,Ñ,ùs   ‚˜™rI   N)r8   ry   rk   r½   )r°   r�   rÂ   rµ   rk   r‘   r¶   rI   rP   r>   r½   r½   U  s6   † ñð ðIà'ðIð 
óIó ðI÷"-rP   r½   c                  ó4   • \ rS rSrSr\    SS j5       rSrg)ÚConnectedUNIXDatagramSocketiu  zv
Represents a connected Unix datagram socket.

Supports all relevant extra attributes from :class:`~SocketAttribute`.
c              ƒ  ó    #   • [        U[        R                  [        R                  SS9n[	        5       R                  U5      I Sh  v•N $  N7f)a:  
Wrap an existing socket object or file descriptor as a connected UNIX datagram
socket.

The newly created socket wrapper takes ownership of the socket being passed in.
The existing socket must already be connected.

:param sock_or_fd: a socket object or file descriptor
:return: a connected UNIX datagram socket

Trq   N)r?   r&   rª   r€   r   Ú#wrap_connected_unix_datagram_socketrt   s      r>   rv   Ú'ConnectedUNIXDatagramSocket.from_socket|  s@   é € ô   Øœ×)Ñ)¬6¯>©>ÈTñ
ˆô 'Ó(×LÑLÈTÓR×RÐRÑRùrƒ   rI   N)r8   ry   rk   rÅ   rz   rI   rP   r>   rÅ   rÅ   u  s1   † ñð ðSà'ðSð 
%óSó óSrP   rÅ   )r8   ry   r9   zsocket.SocketKindr:   zsocket.AddressFamilyr    Úboolr!   rÉ   rk   rE   )8Ú
__future__r   r(   r&   Úabcr   Úcollections.abcr   r   r   Ú
contextlibr   Úior	   Ú	ipaddressr
   r   r   Útypingr   r   r   Ú_core._eventloopr   Ú_core._typedattrr   r   r   Ú_streamsr   r   r   Ú_tasksr   rµ   r   rN   Útupler%   r   r   r�   r   r   r   r3   r?   rA   rR   rn   r}   r“   r¨   r¸   r½   rÅ   rI   rP   r>   Ú<module>rÖ      sª  ðÞ "ã Û Ý ß 9Ñ 9Ý %Ý ß .Ý  ß *Ñ *å 0÷ñ ÷
 CÑ BÝ à Ñ,¨{Ñ:€ˆyÓ :Ø! # s (™O€�	Ó +Ø(¨3Ñ.€ˆiÓ .Ø  ¨Ð!6Ñ7€ˆyÓ 7Ø$)¨%°¨*Ñ$5Ð ˜	Ó 5Ù�:Ó€ð )/×(8Ñ(8ðBð
 $ØñBØ#ðBà ðBð &ðBð
 ðBð ðBð öBôJ&)Ð'ô &)ôR#Ð,ô #ôLB�:˜ô Bô.$�|ô $ôN)7�X˜lÑ+¨_ô )7ôX5Ð& }Ñ5°ô 5ô<IÐ/°Ñ6¸ô Iô6-ØÐ1Ñ2°Oô-ô@SÐ"8¸Ñ"?Àõ SrP   