o
    [Zh                     @   s~   d dl Z d dlZd dlZd dlmZ d dlmZ d e jdfddZdd Z	dd	 Z
e jfd
dZdd Zd e jdfddZdS )    N)log)hide_thread_from_debuggerc              	   C   s   |dksJ | du rd} |du rd}zEt  }|dkr@tjdkr)|tjtjd nz|tjtjd W n tt	fy?   Y nw |
| |f |durP|| || W |S  tyc   |   w )z9Return a local server socket listening on the given port.r   Nz	127.0.0.1win32   )	_new_socksysplatform
setsockoptsocket
SOL_SOCKETZSO_EXCLUSIVEADDRUSESO_REUSEADDRAttributeErrorOSErrorbind
settimeoutlisten	Exceptionclose)hostportbacklogtimeoutserver r   M/var/www/html/lang_env/lib/python3.10/site-packages/debugpy/common/sockets.pycreate_server   s0   

r   c                   C   s   t  S )zAReturn a client socket that may be connected to a remote address.)r   r   r   r   r   create_client-   s   r   c               	   C   s   t  t jt jt j} z| t jt jd W n ttfy    Y nw z| t jt j	d W n ttfy7   Y nw z| t jt j
d W n ttfyN   Y nw z| t jt jd W | S  ttfyg   Y | S w )Nr         )r
   AF_INETSOCK_STREAMIPPROTO_TCPr	   r   SO_KEEPALIVEr   r   TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNTsockr   r   r   r   2   s.   r   c                 C   s   |  | dS )zShut down the given socket.N)shutdown)r'   howr   r   r   	shut_downL   s   r*   c                 C   s,   zt |  W n	 ty   Y nw |   dS )zShutdown and close the socket.N)r*   r   r   r&   r   r   r   close_socketQ   s   r+   c              	      s   |dksJ z	t ||||W n ty    td|| Y nw  \}}td||  fdd}tj|d}d|_t	| |
  S )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               	      sL   	 z
  \} \}}W n ttjfy   Y d S w td||  |  q)NTz.Accepted incoming {0} connection from {1}:{2}.)acceptr   r
   errorr   info)r'   Z
other_hostZ
other_porthandlerZlistenernamer   r   accept_workerl   s   zserve.<locals>.accept_worker)targetT)r   r   r   Zreraise_exceptiongetsocknamer.   	threadingThreaddaemonr   start)r1   r0   r   r   r   r   r2   threadr   r/   r   serveZ   s    r:   )r
   r   r5   Zdebugpy.commonr   Zdebugpy.common.utilr   	SOMAXCONNr   r   r   	SHUT_RDWRr*   r+   r:   r   r   r   r   <module>   s    	