Ë
    aQbjÈ>  ã                  óò  — U d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	Z	ddl
mZ ddlmZmZ ddlmZmZ erd d	lmZ dd
lmZ d dlZej0                  dk\  rd dlmZ nerd dlmZ dZej8                  ej:                  hZedd„«       Ze G d„ de«      «       Z g d¢Z! e"«       Z#de$d<   e!D ]+  Z% ee&«      5  e#jO                   e(ee%«      «       ddd«       Œ- e G d„ dee    «      «       Z)y# 1 sw Y   ŒKxY w)é    )ÚannotationsN)ÚcontextmanagerÚsuppress)ÚTYPE_CHECKINGÚoverloadé   )Úsocket)ÚConflictDetectorÚfinal)ÚHalfCloseableStreamÚListener)Ú	Generator)Ú
SocketType)é   é   )ÚBufferi   c               #  óº   K  — 	 d –— y # t         $ rF} | j                  t        v rt        j                  d«      d ‚t        j
                  d| › �«      | ‚d } ~ ww xY w­w)Nzthis socket was already closedzsocket connection broken: )ÚOSErrorÚerrnoÚ_closed_stream_errnosÚtrioÚClosedResourceErrorÚBrokenResourceError)Úexcs    úI/var/www/html/venv/lib/python3.12/site-packages/trio/_highlevel_socket.pyÚ)_translate_socket_errors_to_stream_errorsr   +   s^   è ø€ ðXÜøÜò XØ�9‰9Ô-Ñ-Ü×*Ñ*Ð+KÓLÐRVÐVä×*Ñ*Ð-GÈÀuÐ+MÓNÐTWÐWûð	Xüs%   ‚A„	 ˆA‰	A’AAÁAÁAc                  ó²   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zddd„Zdd„Z	e
dd	„«       Ze
dd
„«       Z	 d	 	 	 	 	 	 	 	 	 dd„Ze
dd„«       Ze
dd„«       Zddd„Zy)ÚSocketStreamuf  An implementation of the :class:`trio.abc.HalfCloseableStream`
    interface based on a raw network socket.

    Args:
      socket: The Trio socket object to wrap. Must have type ``SOCK_STREAM``,
          and be connected.

    By default for TCP sockets, :class:`SocketStream` enables ``TCP_NODELAY``,
    and (on platforms where it's supported) enables ``TCP_NOTSENT_LOWAT`` with
    a reasonable buffer size (currently 16 KiB) â€“ see `issue #72
    <https://github.com/python-trio/trio/issues/72>`__ for discussion. You can
    of course override these defaults by calling :meth:`setsockopt`.

    Once a :class:`SocketStream` object is constructed, it implements the full
    :class:`trio.abc.HalfCloseableStream` interface. In addition, it provides
    a few extra features:

    .. attribute:: socket

       The Trio socket object that this stream wraps.

    c                ó:  — t        |t        j                  «      st        d«      ‚|j                  t        j
                  k7  rt        d«      ‚|| _        t        d«      | _	        t        t        «      5  | j                  t        j                  t        j                  d«       d d d «       t        t        d«      rHt        t        «      5  | j                  t        j                  t        j                   d«       d d d «       y y # 1 sw Y   ŒbxY w# 1 sw Y   y xY w)Nz*SocketStream requires a Trio socket objectz*SocketStream requires a SOCK_STREAM socketz;another task is currently sending data on this SocketStreamTÚTCP_NOTSENT_LOWATi @  )Ú
isinstanceÚtsocketr   Ú	TypeErrorÚtypeÚSOCK_STREAMÚ
ValueErrorr	   r
   Ú_send_conflict_detectorr   r   Ú
setsockoptÚIPPROTO_TCPÚTCP_NODELAYÚhasattrr    )Úselfr	   s     r   Ú__init__zSocketStream.__init__O   sê   € Ü˜&¤'×"4Ñ"4Ô5ÜÐHÓIÐIØ�;‰;œ'×-Ñ-Ò-ÜÐIÓJÐJàˆŒÜ'7ØIó(
ˆÔ$ô ”gÓñ 	LØ�O‰OœG×/Ñ/´×1DÑ1DÀdÔK÷	Lô ”7Ð/Ô0ô œ'Ó"ñ WØ—‘¤× 3Ñ 3´W×5NÑ5NÐPUÔV÷Wð Wð 1÷	Lð 	Lú÷Wð Wús   Á40DÃ0DÄDÄDc           	   ƒ  óÔ  K  — | j                   j                  rt        j                  d«      ‚| j                  5  t        «       5  t        |«      5 }|sr| j                   j                  «       dk(  rt        j                  d«      ‚t        j                  j                  «       ƒ d {  –—†  	 d d d «       d d d «       d d d «       y d}|t        |«      k  rE||d  5 }| j                   j                  |«      ƒ d {  –—† }d d d «       |z  }|t        |«      k  rŒEd d d «       d d d «       d d d «       y 7 ŒŒ7 Œ;# 1 sw Y   Œ:xY w# 1 sw Y   Œ*xY w# 1 sw Y   Œ.xY w# 1 sw Y   y xY w­w)Nz!can't send data after sending EOFéÿÿÿÿzsocket was already closedr   )r	   Údid_shutdown_SHUT_WRr   r   r'   r   Ú
memoryviewÚfilenoÚlowlevelÚ
checkpointÚlenÚsend)r,   ÚdataÚ
total_sentÚ	remainingÚsents        r   Úsend_allzSocketStream.send_allm   sL  è ø€ Ø�;‰;×+Ò+Ü×*Ñ*Ð+NÓOÐOØ×)Ñ)ñ 	+Ü:Ó<ñ +Ü Ó%ð 
+¨ÙØŸ;™;×-Ñ-Ó/°2Ò5Ü"&×":Ñ":Ð;VÓ"WÐWÜ"Ÿm™m×6Ñ6Ó8×8Ð8Ø÷
+÷+÷	+ð 	+ð "#�JØ$¤s¨4£yÒ0Ø! * +Ð.ð E°)Ø)-¯©×)9Ñ)9¸)Ó)D×#D˜D÷Eà" dÑ*˜
ð %¤s¨4£yÓ0÷
+÷+÷	+ð 	+ð 9øð
 $Eø÷Eð Eú÷
+ð 
+ú÷+ð +ú÷	+ð 	+üs¡   ‚8E(ºEÁEÁAEÂ'D4
Â(EÂ-EÂ5EÂ=	E(ÃEÃD8	Ã:D6Ã;D8	Ã?EÄEÄ#EÄ+	E(Ä4EÄ6D8	Ä8EÄ=EÅEÅ	EÅE	ÅEÅE%Å!E(c              ƒ  ó.  K  — | j                   5  | j                  j                  «       dk(  rt        j                  ‚t        «       5  | j                  j                  «       ƒ d {  –—†  d d d «       d d d «       y 7 Œ# 1 sw Y   ŒxY w# 1 sw Y   y xY w­w)Nr/   )r'   r	   r2   r   r   r   Úwait_writable©r,   s    r   Úwait_send_all_might_not_blockz*SocketStream.wait_send_all_might_not_block~   s€   è ø€ Ø×)Ñ)ñ 	2Ø�{‰{×!Ñ!Ó# rÒ)Ü×.Ñ.Ð.Ü:Ó<ñ 2Ø—k‘k×/Ñ/Ó1×1Ð1÷2÷	2ð 	2ð 2ø÷2ð 2ú÷	2ð 	2üsF   ‚B�8B	ÁA=Á%A;Á&A=Á*B	Á2	BÁ;A=Á=B	ÂB	Â	BÂBc              ƒ  ón  K  — | j                   5  t        j                  j                  «       ƒ d {  –—†  | j                  j
                  r
	 d d d «       y t        «       5  | j                  j                  t        j                  «       d d d «       d d d «       y 7 Œi# 1 sw Y   ŒxY w# 1 sw Y   y xY w­w©N)
r'   r   r3   r4   r	   r0   r   Úshutdownr"   ÚSHUT_WRr>   s    r   Úsend_eofzSocketStream.send_eof…   s‘   è ø€ Ø×)Ñ)ñ 	6Ü—-‘-×*Ñ*Ó,×,Ð,ð �{‰{×/Ò/Ø÷	6ð 	6ô ;Ó<ñ 6Ø—‘×$Ñ$¤W§_¡_Ô5÷6÷	6ð 	6Ø,ø÷
6ð 6ú÷	6ð 	6üsP   ‚B5�"B)±B²B)Á	B5Á
B)Á *BÂ
B)Â	B5ÂB)ÂB&	Â"B)Â)B2Â.B5Nc              ƒ  óÄ   K  — |€t         }|dk  rt        d«      ‚t        «       5  | j                  j	                  |«      ƒ d {  –—† cd d d «       S 7 Œ# 1 sw Y   y xY w­w)Nr   zmax_bytes must be >= 1)ÚDEFAULT_RECEIVE_SIZEr&   r   r	   Úrecv)r,   Ú	max_bytess     r   Úreceive_somezSocketStream.receive_some�   s\   è ø€ ØÐÜ,ˆIØ�qŠ=ÜÐ5Ó6Ð6Ü6Ó8ñ 	5ØŸ™×)Ñ)¨)Ó4×4÷	5ñ 	5Ø4ø÷	5ð 	5üs.   ‚#A ¥AÁAÁAÁ
A ÁAÁAÁA c              ƒ  ó�   K  — | j                   j                  «        t        j                  j	                  «       ƒ d {  –—†  y 7 Œ­wrA   ©r	   Úcloser   r3   r4   r>   s    r   ÚaclosezSocketStream.aclose—   s,   è ø€ Ø�‰×ÑÔÜ�m‰m×&Ñ&Ó(×(Ò(úó   ‚<A¾A¿Ac                 ó   — y rA   © )r,   ÚlevelÚoptionÚvalues       r   r(   zSocketStream.setsockopt�   s   € ØPSó    c                 ó   — y rA   rP   ©r,   rQ   rR   rS   Úlengths        r   r(   zSocketStream.setsockopt    s   € ØUXrT   c                ó¸   — |€*|€t        d«      ‚| j                  j                  |||«      S |�t        d|›d�«      ‚| j                  j                  ||||«      S )zlSet an option on the underlying socket.

        See :meth:`socket.socket.setsockopt` for details.

        zKinvalid value for argument 'value', must not be None when specifying lengthz$invalid value for argument 'value': z%, must be None when specifying optlen)r#   r	   r(   rV   s        r   r(   zSocketStream.setsockopt¤   sv   € ð ˆ>Øˆ}ÜØaóð ð —;‘;×)Ñ)¨%°¸Ó?Ð?ØÐÜØ6°u°iÐ?dÐeóð ð �{‰{×%Ñ% e¨V°U¸FÓCÐCrT   c                 ó   — y rA   rP   )r,   rQ   rR   s      r   Ú
getsockoptzSocketStream.getsockopt¼   s   € Ø:=rT   c                 ó   — y rA   rP   ©r,   rQ   rR   Ú
buffersizes       r   rZ   zSocketStream.getsockopt¿   s   € ØMPrT   c                ó~   — |dk(  r| j                   j                  ||«      S | j                   j                  |||«      S )zƒCheck the current value of an option on the underlying socket.

        See :meth:`socket.socket.getsockopt` for details.

        r   )r	   rZ   r\   s       r   rZ   zSocketStream.getsockoptÂ   s;   € ð ˜Š?Ø—;‘;×)Ñ)¨%°Ó8Ð8à—;‘;×)Ñ)¨%°¸ÓDÐDrT   ©r	   r   ÚreturnÚNone)r7   zbytes | bytearray | memoryviewr`   ra   ©r`   ra   rA   )rH   ú
int | Noner`   Úbytes)rQ   ÚintrR   re   rS   zint | Bufferr`   ra   )
rQ   re   rR   re   rS   ra   rW   re   r`   ra   )
rQ   re   rR   re   rS   zint | Buffer | NonerW   rc   r`   ra   )rQ   re   rR   re   r`   re   )rQ   re   rR   re   r]   re   r`   rd   )r   )rQ   re   rR   re   r]   re   r`   zint | bytes)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r;   r?   rD   rI   rM   r   r(   rZ   rP   rT   r   r   r   6   s¨   „ ñó.Wó<+ó"2ó6ô5ó)ð ÚSó ØSàÚXó ØXð "ðDàðDð ðDð #ð	Dð
 ðDð 
óDð0 Ú=ó Ø=àÚPó ØPõErT   r   )ÚEPERMÚECONNABORTEDÚEPROTOÚENETDOWNÚENOPROTOOPTÚ	EHOSTDOWNÚENONETÚEHOSTUNREACHÚ
EOPNOTSUPPÚENETUNREACHÚENOSRÚESOCKTNOSUPPORTÚEPROTONOSUPPORTÚ	ETIMEDOUTÚ
ECONNRESETzset[int]Ú_ignorable_accept_errnosc                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	ÚSocketListeneraâ  A :class:`~trio.abc.Listener` that uses a listening socket to accept
    incoming connections as :class:`SocketStream` objects.

    Args:
      socket: The Trio socket object to wrap. Must have type ``SOCK_STREAM``,
          and be listening.

    Note that the :class:`SocketListener` "takes ownership" of the given
    socket; closing the :class:`SocketListener` will also close the socket.

    .. attribute:: socket

       The Trio socket object that this stream wraps.

    c                óP  — t        |t        j                  «      st        d«      ‚|j                  t        j
                  k7  rt        d«      ‚	 |j                  t        j                  t        j                  «      }|st        d«      ‚|| _        y # t        $ r
 Y || _        y w xY w)Nz,SocketListener requires a Trio socket objectz,SocketListener requires a SOCK_STREAM socketz*SocketListener requires a listening socket)r!   r"   r   r#   r$   r%   r&   rZ   Ú
SOL_SOCKETÚSO_ACCEPTCONNr   r	   )r,   r	   Ú	listenings      r   r-   zSocketListener.__init__x  s•   € Ü˜&¤'×"4Ñ"4Ô5ÜÐJÓKÐKØ�;‰;œ'×-Ñ-Ò-ÜÐKÓLÐLð	OØ×)Ñ)¬'×*<Ñ*<¼g×>SÑ>SÓTˆIñ
 Ü Ð!MÓNÐNàˆ�øô ò 	àð
 ˆ�ð	ús   Á.B Â	B%Â$B%c              ƒ  ó  K  — 	 	 | j                   j                  «       ƒ d{  –—† \  }}t        |«      S 7 Œ# t        $ r@}|j                  t
        v rt        j                  d‚|j                  t        vr‚ Y d}~nd}~ww xY wŒ€­w)a#  Accept an incoming connection.

        Returns:
          :class:`SocketStream`

        Raises:
          OSError: if the underlying call to ``accept`` raises an unexpected
              error.
          ClosedResourceError: if you already closed the socket.

        This method handles routine errors like ``ECONNABORTED``, but passes
        other errors on to its caller. In particular, it does *not* make any
        special effort to handle resource exhaustion errors like ``EMFILE``,
        ``ENFILE``, ``ENOBUFS``, ``ENOMEM``.

        N)	r	   Úacceptr   r   r   r   r   r   ry   )r,   ÚsockÚ_r   s       r   r�   zSocketListener.acceptˆ  s€   è ø€ ð" ð*Ø $§¡× 2Ñ 2Ó 4×4‘��aô $ DÓ)Ð)ð 5ùÜò Ø—9‘9Ô 5Ñ5Ü×2Ñ2¸Ð<Ø—9‘9Ô$<Ñ<Øô =ûðúð ùs7   ‚B…7 ¢5£7 ªBµ7 ·	B Á 6A;Á6BÁ;B Â Bc              ƒ  ó�   K  — | j                   j                  «        t        j                  j	                  «       ƒ d{  –—†  y7 Œ­w)z.Close this listener and its underlying socket.NrK   r>   s    r   rM   zSocketListener.aclose¤  s,   è ø€ à�‰×ÑÔÜ�m‰m×&Ñ&Ó(×(Ò(úrN   Nr_   )r`   r   rb   )rf   rg   rh   ri   r-   r�   rM   rP   rT   r   r{   r{   f  s   „ ñó ó *ô8)rT   r{   )r`   zGenerator[None, None, None])*Ú
__future__r   r   Ú
contextlibr   r   Útypingr   r   r   Ú r	   r"   Ú_utilr
   r   Úabcr   r   Úcollections.abcr   Ú_socketr   ÚsysÚversion_infor   Útyping_extensionsrF   ÚEBADFÚENOTSOCKr   r   r   Ú_ignorable_accept_errno_namesÚsetry   Ú__annotations__ÚnameÚAttributeErrorÚaddÚgetattrr{   rP   rT   r   ú<module>r™      s  ðæ "ã ß /ß *ã å ß *ß .áÝ)å#ã 
à×Ñ�wÒö 'ÙÝ(ð Ð ð 
‡K�Kà	‡N�Nð	Ð ð òXó ðXð ôWEÐ&ó WEó ðWEòd!Ð ñ. &)£UÐ ˜(Ó *Ø)ò ;€DÙ	�.Ó	!ñ ;Ø ×$Ñ$¡W¨U°DÓ%9Ô:÷;ð ;ð;ð
 ô@)�X˜lÑ+ó @)ó ñ@)÷;ð ;ús   Â6C-Ã-C6	