
    vKgu=                       % S SK Jr  S SKrS SKJrJr  S SKJrJr  S SK	r	SSK
Jr  SSKJrJr  SSKJrJr  \(       a  S S	KJr  S S
KJr  SSKJr  Sr\R4                  \R6                  1r\SS j5       r\ " S S\5      5       r/ SQr\ " 5       r!S\"S'   \ H,  r#\" \$5         \!RK                  \&" \\#5      5        SSS5        M.     \ " S S\\   5      5       r'g! , (       d  f       MS  = f)    )annotationsN)contextmanagersuppress)TYPE_CHECKINGoverload   socket)ConflictDetectorfinal)HalfCloseableStreamListener)	Generator)Buffer)
SocketTypei   c               #     #     S v   g ! [          aJ  n U R                  [        ;   a  [        R                  " S5      S e[        R
                  " SU  35      U eS n A ff = f7f)Nzthis socket was already closedzsocket connection broken: )OSErrorerrno_closed_stream_errnostrioClosedResourceErrorBrokenResourceError)excs    V/var/www/highfloat_scraper/venv/lib/python3.13/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                      \ rS rSrSrSS jrSS jrSS jrSS jrSSS jjr	SS	 jr
\SS
 j5       r\SS j5       r S         SS jjr\SS j5       r\SS j5       rSSS jjrSrg)SocketStream.   u*  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                b   [        U[        R                  5      (       d  [        S5      eUR                  [        R
                  :w  a  [        S5      eXl        [        S5      U l	        [        [        5         U R                  [        R                  [        R                  S5        S S S 5        [        [        S5      (       aH  [        [        5         U R                  [        R                  [        R                   S5        S S S 5        g g ! , (       d  f       Nl= f! , (       d  f       g = f)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__SocketStream.__init__G   s    &'"4"455HII;;'---IJJ'7I(
$ gOOG//1D1DdK  7/00 '" 3 3W5N5NPUV #" 1  #"s   90D0D 
D 
D.c           	       #    U R                   R                  (       a  [        R                  " S5      eU R                     [        5          [        U5       nU(       dt  U R                   R                  5       S:X  a  [        R                  " S5      e[        R                  R                  5       I S h  vN    S S S 5        S S S 5        S S S 5        g SnU[        U5      :  aF  XS   nU R                   R                  U5      I S h  vN nS S S 5        UW-  nU[        U5      :  a  MF  S S S 5        S S S 5        S S S 5        g  N N=! , (       d  f       NA= f! , (       d  f       N4= f! , (       d  f       N== f! , (       d  f       g = f7f)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_allSocketStream.send_alle   s#    ;;++**+NOO)):<%;;--/25"&":":;V"WW"mm66888 & = *) "#J$s4y0!+.))-)9)9))D#DD /"d*
 %s4y0 & = *) 9
 $E /. &% =< *)s   >F E:E)AE4E
5E:E)E:
	FE(E	EE	E*E)2E::	FEE	
EE
E&"E))
E7	3E::
FFc                D  #    U R                      U R                  R                  5       S:X  a  [        R                  e[        5          U R                  R                  5       I S h  vN   S S S 5        S S S 5        g  N! , (       d  f       N= f! , (       d  f       g = f7f)Nr0   )r'   r
   r3   r   r   r   wait_writabler,   s    r   wait_send_all_might_not_block*SocketStream.wait_send_all_might_not_blockv   sn     )){{!!#r)...:<kk//111 = *) 2 =< *)sF   B 9BA>&A<'A>+B3	B <A>>
B	B
BB c                  #    U R                      [        R                  R                  5       I S h  vN   U R                  R
                  (       a
   S S S 5        g [        5          U R                  R                  [        R                  5        S S S 5        S S S 5        g  Nn! , (       d  f       N= f! , (       d  f       g = f7fN)
r'   r   r4   r5   r
   r1   r   shutdownr"   SHUT_WRr@   s    r   send_eofSocketStream.send_eof}   s}     ))--**,,, {{// *) ;<$$W__5 = *),
 =< *)sP   C"B3B  B3	C
B3%*B"B3	C B3"
B0	,B33
C=CNc                   #    Uc  [         nUS:  a  [        S5      e[        5          U R                  R	                  U5      I S h  vN sS S S 5        $  N! , (       d  f       g = f7f)Nr   zmax_bytes must be >= 1)DEFAULT_RECEIVE_SIZEr&   r   r
   recv)r,   	max_bytess     r   receive_someSocketStream.receive_some   sQ     ,Iq=56668)))44 984 98s.   %A'AAA

A'A
A$ A'c                   #    U R                   R                  5         [        R                  R	                  5       I S h  vN   g  N7frD   r
   closer   r4   r5   r@   s    r   acloseSocketStream.aclose   s+     mm&&(((   <AAAc                    g rD    )r,   leveloptionvalues       r   r(   SocketStream.setsockopt   s    PS    c                    g rD   rV   r,   rW   rX   rY   lengths        r   r(   rZ      s    UXr[   c                    Uc*  Uc  [        S5      eU R                  R                  XU5      $ Ub  [        SU< S35      eU R                  R                  XX45      $ )z\Set 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(   r]   s        r   r(   rZ      sp     >}a  ;;))%??6ui?de  {{%%eUCCr[   c                    g rD   rV   )r,   rW   rX   s      r   
getsockoptSocketStream.getsockopt   s    :=r[   c                    g rD   rV   r,   rW   rX   
buffersizes       r   ra   rb      s    MPr[   c                |    US:X  a  U R                   R                  X5      $ U R                   R                  XU5      $ )zsCheck the current value of an option on the underlying socket.

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

r   )r
   ra   rd   s       r   ra   rb      s7     ?;;))%88;;))%DDr[   )r'   r
   r
   r   )r8   zbytes | bytearray | memoryviewreturnNonerh   ri   rD   )rL   
int | Nonerh   bytes)rW   intrX   rm   rY   zint | Bufferrh   ri   )
rW   rm   rX   rm   rY   ri   r^   rm   rh   ri   )
rW   rm   rX   rm   rY   zint | Buffer | Noner^   rk   rh   ri   )rW   rm   rX   rm   rh   rm   )rW   rm   rX   rm   re   rm   rh   rl   )r   )rW   rm   rX   rm   re   rm   rh   zint | bytes)__name__
__module____qualname____firstlineno____doc__r-   r<   rA   rG   rM   rR   r   r(   ra   __static_attributes__rV   r[   r   r   r   .   s    .W<+"265) S SX X "DD D #	D
 D 
D0 = =P PE Er[   r   )EPERMECONNABORTEDEPROTOENETDOWNENOPROTOOPT	EHOSTDOWNENONETEHOSTUNREACH
EOPNOTSUPPENETUNREACHENOSRESOCKTNOSUPPORTEPROTONOSUPPORT	ETIMEDOUT
ECONNRESETzset[int]_ignorable_accept_errnosc                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)SocketListeneri]  a  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                Z   [        U[        R                  5      (       d  [        S5      eUR                  [        R
                  :w  a  [        S5      e UR                  [        R                  [        R                  5      nU(       d  [        S5      e Xl        g ! [         a     Nf = f)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&   ra   
SOL_SOCKETSO_ACCEPTCONNr   r
   )r,   r
   	listenings      r   r-   SocketListener.__init__o  s    &'"4"455JKK;;'---KLL	O))'*<*<g>S>STI
  !MNN    		s   .B 
B*)B*c                  #      U R                   R                  5       I Sh  vN u  p[        U5      $  N! [         aD  nUR                  [
        ;   a  [        R                  SeUR                  [        ;  a  e  SnAOSnAff = fM  7f)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   r   )r,   sock_r   s       r   r   SocketListener.accept  s}     " * $ 2 2 44 $D)) 5 99 5522<99$<< = s7   B	6 46 B	6 
B :A?:B	?BB	c                   #    U R                   R                  5         [        R                  R	                  5       I Sh  vN   g N7f)z.Close this listener and its underlying socket.NrP   r@   s    r   rR   SocketListener.aclose  s+     mm&&(((rT   r	   Nrg   )rh   r   rj   )	rn   ro   rp   rq   rr   r-   r   rR   rs   rV   r[   r   r   r   ]  s      *8)r[   r   )rh   zGenerator[None, None, None])(
__future__r   r   
contextlibr   r   typingr   r   r    r
   r"   _utilr   r   abcr   r   collections.abcr   typing_extensionsr   _socketr   rJ   EBADFENOTSOCKr   r   r   _ignorable_accept_errno_namessetr   __annotations__nameAttributeErroraddgetattrr   rV   r[   r   <module>r      s    "  / *   * .)(#   
KK	NN	  X X VE& VE VEb! . &)U ( *)D	.	! $$WUD%9: 
"	! *
 @)Xl+ @) @) 
"	!s    C
C(	