
     fr=                       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mZ dZej        ej        hZedd            Ze G d de                      Zg dZ e             Z!de"d<   eD ]DZ# ee$          5  e!%                     e&ee#                     ddd           n# 1 swxY w Y   Ee G d dee                               Z'dS )    )annotationsN)contextmanagersuppress)TYPE_CHECKINGoverload   )socket)ConflictDetectorfinal)HalfCloseableStreamListener)	Generator)Buffer)
SocketTypei   returnGenerator[None, None, None]c               #     K   	 d V  d S # t           $ r@} | j        t          v rt          j        d          d t          j        d|            | d } ~ ww xY w)Nzthis socket was already closedzsocket connection broken: )OSErrorerrno_closed_stream_errnostrioClosedResourceErrorBrokenResourceError)excs    Y/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/trio/_highlevel_socket.py)_translate_socket_errors_to_stream_errorsr   #   s|      X X X X9---*+KLLRVV*+M+M+MNNTWW	Xs   
 
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dS ).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.

    r	   r   c                b   t          |t          j                  st          d          |j        t          j        k    rt          d          || _        t          d          | _	        t          t                    5  |                     t          j        t          j        d           d d d            n# 1 swxY w Y   t          t          d          rZt          t                    5  |                     t          j        t          j        d           d d d            d S # 1 swxY w Y   d S d S )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__G   s   &'"455 	JHIII;'---IJJJ'7I(
 (
$ g 	L 	LOOG/1DdKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 7/00 	W '"" W W 3W5NPUVVVW W W W W W W W W W W W W W W W W W	W 	Ws$   =,B55B9<B9),D""D&)D&databytes | bytearray | memoryviewr   Nonec           	       K   | j         j        rt          j        d          | j        5  t                      5  t          |          5 }|sy| j                                         dk    rt          j        d          t          j        	                                 d {V  	 d d d            d d d            d d d            d S d}|t          |          k     rZ||d          5 }| j                             |           d {V }d d d            n# 1 swxY w Y   ||z  }|t          |          k     Zd d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz!can't send data after sending EOFzsocket was already closedr   )r	   did_shutdown_SHUT_WRr   r   r'   r   
memoryviewfilenolowlevel
checkpointlensend)r,   r.   
total_sent	remainingsents        r   send_allzSocketStream.send_alle   s     ;+ 	P*+NOOO) 	+ 	+:<< + +%% 
+ ;--//255"&":;V"W"WW"m66888888888
+ 
+ 
+ 
+ 
+ 
++ + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ "#J$s4yy00!*++. E))-)9)9))D)D#D#D#D#D#D#DDE E E E E E E E E E E E E E E"d*
 %s4yy00
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
++ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   E/E	AE "E-E/E $!D	E DE DE 4E EEEEE/E	E/E	E//E36E3c                &  K   | j         5  | j                                        dk    rt          j        t                      5  | j                                         d {V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr2   )r'   r	   r5   r   r   r   wait_writabler,   s    r   wait_send_all_might_not_blockz*SocketStream.wait_send_all_might_not_blockv   s     ) 	2 	2{!!##r))..:<< 2 2k//1111111112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s5   8B A."B.A2	2B5A2	6BB
B
c                Z  K   | j         5  t          j                                         d {V  | j        j        r	 d d d            d S t                      5  | j                            t          j	                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S N)
r'   r   r6   r7   r	   r3   r   shutdownr"   SHUT_WRr@   s    r   send_eofzSocketStream.send_eof}   sN     ) 	6 	6-**,,,,,,,,, {/ 	6 	6 	6 	6 	6 	6 	6 	6 ;<< 6 6$$W_5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s;   2B 	B %B<B B	B B	B  B$'B$N	max_bytes
int | Nonebytesc                   K   |t           }|dk     rt          d          t                      5  | j                            |           d {V cd d d            S # 1 swxY w Y   d S )Nr   zmax_bytes must be >= 1)DEFAULT_RECEIVE_SIZEr&   r   r	   recv)r,   rG   s     r   receive_somezSocketStream.receive_some   s      ,Iq==5666688 	5 	5)))44444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s    AA #A c                   K   | j                                          t          j                                         d {V  d S rC   r	   closer   r6   r7   r@   s    r   aclosezSocketStream.aclose   sF      m&&(((((((((((    levelintoptionvalueint | Bufferc                    d S rC    )r,   rS   rU   rV   s       r   r(   zSocketStream.setsockopt   s    PSPSrR   lengthc                    d S rC   rY   r,   rS   rU   rV   rZ   s        r   r(   zSocketStream.setsockopt   s    UXUXrR   int | Buffer | Nonec                    |-|t          d          | j                            |||          S |t          d|d          | j                            ||||          S )zlSet an option on the underlying socket.

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

        NzKinvalid 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(   r\   s        r   r(   zSocketStream.setsockopt   s     >}a   ;))%???eueee   {%%eVUFCCCrR   c                    d S rC   rY   )r,   rS   rU   s      r   
getsockoptzSocketStream.getsockopt   s    :=#rR   
buffersizec                    d S rC   rY   r,   rS   rU   ra   s       r   r`   zSocketStream.getsockopt   s    MPSrR   r   int | bytesc                |    |dk    r| j                             ||          S | j                             |||          S )zCheck the current value of an option on the underlying socket.

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

        r   )r	   r`   rc   s       r   r`   zSocketStream.getsockopt   s?     ??;))%888;))%DDDrR   r	   r   )r.   r/   r   r0   r   r0   rC   )rG   rH   r   rI   )rS   rT   rU   rT   rV   rW   r   r0   )
rS   rT   rU   rT   rV   r0   rZ   rT   r   r0   )
rS   rT   rU   rT   rV   r]   rZ   rH   r   r0   )rS   rT   rU   rT   r   rT   )rS   rT   rU   rT   ra   rT   r   rI   )r   )rS   rT   rU   rT   ra   rT   r   rd   )__name__
__module____qualname____doc__r-   r=   rA   rF   rM   rQ   r   r(   r`   rY   rR   r   r   r   .   s>        .W W W W<+ + + +"2 2 2 26 6 6 65 5 5 5 5) ) ) ) SSS XSXXX XX "D D D D D0 === X=PPP XPE E E E E E ErR   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d
S )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.

    r	   r   c                H   t          |t          j                  st          d          |j        t          j        k    rt          d          	 |                    t          j        t          j	                  }|st          d          n# t          $ r Y nw xY w|| _        d S )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&   r`   
SOL_SOCKETSO_ACCEPTCONNr   r	   )r,   r	   	listenings      r   r-   zSocketListener.__init__o  s    &'"455 	LJKKK;'---KLLL	O))'*<g>STTI
  O !MNNNO	  	 	 	D	 s   *B 
BBr   r   c                   K   	 	 | j                                          d{V \  }}t          |          S # t          $ r4}|j        t
          v rt          j        d|j        t          vr Y d}~nd}~ww xY wt)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``.

        TN)	r	   acceptr   r   r   r   r   r   r{   )r,   sock_r   s       r   r   zSocketListener.accept  s      "		** $ 2 2 4 4444444a $D)))    9 5552<9$<<< =<<<<		*s   "6 
A4 *A//A4r0   c                   K   | j                                          t          j                                         d{V  dS )z.Close this listener and its underlying socket.NrO   r@   s    r   rQ   zSocketListener.aclose  sF      m&&(((((((((((rR   Nrf   )r   r   rg   )rh   ri   rj   rk   r-   r   rQ   rY   rR   r   r}   r}   ]  sZ              * * * *8) ) ) ) ) )rR   r}   )r   r   )(
__future__r   r   
contextlibr   r   typingr   r   r    r	   r"   _utilr
   r   abcr   r   collections.abcr   typing_extensionsr   _socketr   rK   EBADFENOTSOCKr   r   r   _ignorable_accept_errno_namessetr{   __annotations__nameAttributeErroraddgetattrr}   rY   rR   r   <module>r      st   " " " " " " "  / / / / / / / / * * * * * * * *        * * * * * * * * . . . . . . . . $))))))((((((######   
K	N	  X X X X VE VE VE VE VE& VE VE VEb! ! ! . &)SUU  * * * *) ; ;D	.	!	! ; ; $$WWUD%9%9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; @) @) @) @) @)Xl+ @) @) @) @) @)s    C

C	C	