
    ,h=                       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j4                  ej6                  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!jK                   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)Buffer)
SocketTypei   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    X/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/trio/_highlevel_socket.py)_translate_socket_errors_to_stream_errorsr   #   s^     X X99--**+KLRVV**-Gu+MNTW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__G   s    &'"4"45HII;;'---IJJ'7I(
$ g 	LOOG//1D1DdK	L 7/0 '" W 3 3W5N5NPU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 EOFz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_alle   sL    ;;++**+NOO)) 	+:< +% 
+;;--/25"&":":;V"WW"mm66888
++	+ 	+ "#J$s4y0!*+. E))-)9)9))D#DDE"d*
 %s4y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	   r0   r   r   r   wait_writabler*   s    r   wait_send_all_might_not_blockz*SocketStream.wait_send_all_might_not_blockv   s     )) 	2{{!!#r)...:< 2kk//1112	2 	2 22 2	2 	2sF   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   r1   r2   r	   r.   r   shutdownr    SHUT_WRr<   s    r   send_eofzSocketStream.send_eof}   s     )) 	6--**,,, {{//	6 	6 ;< 6$$W__56	6 	6,
6 6	6 	6sP   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 	5s.   #A AAA
A AAA c                   K   | j                   j                          t        j                  j	                          d {    y 7 wr?   r	   closer   r1   r2   r<   s    r   aclosezSocketStream.aclose   s,     mm&&(((   <AAAc                     y r?    )r*   leveloptionvalues       r   r&   zSocketStream.setsockopt   s    PS    c                     y r?   rN   r*   rO   rP   rQ   lengths        r   r&   zSocketStream.setsockopt   s    UXrR   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&   rT   s        r   r&   zSocketStream.setsockopt   sv     >}a  ;;))%??6ui?de  {{%%eVUFCCrR   c                     y r?   rN   )r*   rO   rP   s      r   
getsockoptzSocketStream.getsockopt   s    :=rR   c                     y r?   rN   r*   rO   rP   
buffersizes       r   rX   zSocketStream.getsockopt   s    MPrR   c                ~    |dk(  r| j                   j                  ||      S | j                   j                  |||      S )zCheck the current value of an option on the underlying socket.

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

        r   )r	   rX   rZ   s       r   rX   zSocketStream.getsockopt   s;     ?;;))%88;;))%DDrR   r	   r   returnNone)r5   zbytes | bytearray | memoryviewr^   r_   r^   r_   r?   )rF   
int | Noner^   bytes)rO   intrP   rc   rQ   zint | Bufferr^   r_   )
rO   rc   rP   rc   rQ   r_   rU   rc   r^   r_   )
rO   rc   rP   rc   rQ   zint | Buffer | NonerU   ra   r^   r_   )rO   rc   rP   rc   r^   rc   )rO   rc   rP   rc   r[   rc   r^   rb   )r   )rO   rc   rP   rc   r[   rc   r^   zint | bytes)__name__
__module____qualname____doc__r+   r9   r=   rB   rG   rK   r   r&   rX   rN   rR   r   r   r   .   s    .W<+"265) S SX X "DD D #	D
 D 
D0 = =P P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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$   rX   
SOL_SOCKETSO_ACCEPTCONNr   r	   )r*   r	   	listenings      r   r+   zSocketListener.__init__o  s    &'"4"45JKK;;'---KLL	O))'*<*<g>S>STI
  !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   rw   )r*   sock_r   s       r   r   zSocketListener.accept  s     " * $ 2 2 44a $D)) 5 99 5522<99$<< = 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.NrI   r<   s    r   rK   zSocketListener.aclose  s,     mm&&(((rL   Nr]   )r^   r   r`   )rd   re   rf   rg   r+   r   rK   rN   rR   r   ry   ry   ]  s      *8)rR   ry   )r^   zGenerator[None, None, None])(
__future__r   r   
contextlibr   r   typingr   r   r    r	   r    _utilr
   r   abcr   r   collections.abcr   typing_extensionsr   _socketr   rD   EBADFENOTSOCKr   r   r   _ignorable_accept_errno_namessetrw   __annotations__nameAttributeErroraddgetattrry   rN   rR   r   <module>r      s   "  / *   * .)(#   
KK	NN	  X X VE& VE VEb! . &)U ( *) ;D	.	! ; $$WUD%9:; ;;
 @)Xl+ @) @); ;s   CC	