o
    à›h  ã                   @   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_SOCKETÚSO_EXCLUSIVEADDRUSEÚSO_REUSEADDRÚAttributeErrorÚOSErrorÚbindÚ
settimeoutÚlistenÚ	ExceptionÚclose)ÚhostÚportÚbacklogÚtimeoutÚserver© r   úLc:\Users\shubh\Videos\agent\nova\Lib\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 )z¬Accepts 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©ÚhandlerÚlistenerÚnamer   r   Úaccept_workerl   s   þüózserve.<locals>.accept_worker)ÚtargetT)r   r   r   Zreraise_exceptionÚgetsocknamer/   Ú	threadingÚThreadÚdaemonr   Ústart)r3   r1   r   r   r   r   r4   Úthreadr   r0   r   ÚserveZ   s    ÿÿr<   )r
   r   r7   Zdebugpy.commonr   Zdebugpy.common.utilr   Ú	SOMAXCONNr   r   r   Ú	SHUT_RDWRr+   r,   r<   r   r   r   r   Ú<module>   s    	