
    Xh                         d dl Z d dlZd dlZd dlmZ d dlmZ d Zd Zd Z	d Z
d e j                  dfdZdd	Zdd
Ze j                  fdZd Zd e j                  dfdZy)    N)log)hide_thread_from_debuggerc                  R   	 t        j                   t         j                  t         j                        } | j                  t         j                  t         j
                  d       | j                  d       | j                          y# t         j                  t        t        f$ r Y yw xY w)z'Check if we can bind to IPv4 localhost.   )	127.0.0.1r   TF)socketAF_INETSOCK_STREAM
setsockopt
SOL_SOCKETSO_REUSEADDRbindcloseerrorOSErrorAttributeErrorsocks    J/var/www/html/myenv/lib/python3.12/site-packages/debugpy/common/sockets.pycan_bind_ipv4_localhostr      ss    }}V^^V-?-?@))6+>+>B		"#

LL'>2    BB B&%B&c                  R   	 t        j                   t         j                  t         j                        } | j                  t         j                  t         j
                  d       | j                  d       | j                          y# t         j                  t        t        f$ r Y yw xY w)z'Check if we can bind to IPv6 localhost.r   )::1r   TF)r   AF_INET6r
   r   r   r   r   r   r   r   r   r   s    r   can_bind_ipv6_localhostr      sr    }}V__f.@.@A))6+>+>B		*

LL'>2 r   c                  0    t               ryt               ryy)z~Get the default localhost address.
    Defaults to IPv4 '127.0.0.1', but falls back to IPv6 '::1' if IPv4 is unavailable.
    r   r   )r   r        r   get_default_localhostr   $   s    
     r   c                     	 | j                         dd \  }}||fS # t        $ r)}t        j                  d       t	        d|       |d}~ww xY w)z&Gets the socket address host and port.N   zFailed to get socket address:zFailed to get socket address: )getsockname	Exceptionr   swallow_exceptionRuntimeError)r   hostportexcs       r   get_addressr)   4   se    L%%'+
d
 :	  L=>;C5ABKLs    	A$A		Ac                 8   |dkD  sJ | 
t               } |d}| j                  d      dkD  }	 t        |      }|dk7  rst        j                  dk(  r0|j                  t        j                  t        j                  d       n0	 |j                  t        j                  t        j                  d       |j                  | |f       ||j                  |       |j                  |       |S # t        t        f$ r Y Jw xY w# t        $ r j!                           w xY w)z9Return a local server socket listening on the given port.r   :r   win32)r   count	_new_socksysplatformr   r   r   SO_EXCLUSIVEADDRUSEr   r   r   r   
settimeoutlistenr#   r   )r&   r'   backlogtimeoutipv6servers         r   create_serverr8   >   s    Q;;|$&|::c?QD419 ||w&!!&"3"3V5O5OQRS%%f&7&79L9LaP 	T4L!g&g M '0   s0   AC> /C) 07C> )C;8C> :C;;C> >Dc                     t        |       S )zAReturn a client socket that may be connected to a remote address.)r.   )r6   s    r   create_clientr:   _   s    T?r   c                    | rt         j                  nt         j                  }t        j                   |t         j                  t         j                        }	 |j                  t         j                  t         j                  d       	 |j                  t         j                  t         j                  d       	 |j                  t         j                  t         j                  d       	 |j                  t         j                  t         j                  d       |S # t        t        f$ r Y w xY w# t        t        f$ r Y w xY w# t        t        f$ r Y mw xY w# t        t        f$ r Y |S w xY w)Nr         )r   r   r	   r
   IPPROTO_TCPr   r   SO_KEEPALIVEr   r   TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT)r6   address_familyr   s      r   r.   r.   d   s"   (,V__&..N==););V=O=OPD))6+>+>B**F,?,?C**F,@,@!D**F,>,>B K G$  G$  G$  G$ KsH   /D /D- 7/E '/E D*)D*-D?>D?EEE*)E*c                 &    | j                  |       y)zShut down the given socket.N)shutdown)r   hows     r   	shut_downrG      s    MM#r   c                 Z    	 t        |        | j                          y# t        $ r Y w xY w)zShutdown and close the socket.N)rG   r#   r   r   s    r   close_socketrI      s-    $ 	JJL  s    	**c                 P    |dkD  sJ 	 t        ||||      t	              \  }}t        j
                  d ||        fd}t        j                  |      }d|_        t        |       |j                          S # t        $ r t        j                  d ||       Y w xY w)zAccepts TCP connections on the specified host and port, and invokes the
    provided handler function for every new connection.

    Returns the created server socket.
    r   z8Error listening for incoming {0} connections on {1}:{2}:z4Listening for incoming {0} connections on {1}:{2}...c                      	 	 j                         \  } }|d d \  }}t	        j
                  d||        |        =# t        t        j                  f$ r Y y w xY w)Nr!   z.Accepted incoming {0} connection from {1}:{2}.)acceptr   r   r   r   info)r   address
other_host
other_porthandlerlistenernames       r   accept_workerzserve.<locals>.accept_worker   sp     ( 1g)0!&
J
 HH@	 DM  V\\* s   A   AA)targetT)r8   r#   r   reraise_exceptionr)   rM   	threadingThreaddaemonr   start)	rS   rQ   r&   r'   r4   r5   rT   threadrR   s	   ``      @r   server\      s     Q;;
 tWg>
 X&JD$HHCT4QUV" ]3FFMf%
LLNO;  
FdTX	

s   B !B%$B%)F)r   r/   rW   debugpy.commonr   debugpy.common.utilr   r   r   r   r)   	SOMAXCONNr8   r:   r.   	SHUT_RDWRrG   rI   r\   r   r   r   <module>ra      sr   
  
   9

  (8(8$ B
6 (( 
 %&v/?/? (r   