o
    "j                     @   sJ   d dl Z d dlZd dlZd dlZd dlmZ ddlmZ G dd dZdS )    N)closing   )Devicec                   @   sT   e Zd Zdd Zdd ZdddZdd	 ZdddZdd Zdd Z	e
dd ZdS )Nodec                 C   sh   t  | _|  | _g | _g | _tdd}|	d}t
|d | _t
|d | _t| j| j| _d S )NZ
PORT_RANGEz35100:64000:r   r   )r   Zparse_devicedeviceget_host_ipip
free_portsZ_allocated_portsosgetenvsplitint_port_start	_port_endrandomrandint	_port_cur)selfZ
port_range r   g/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/launch/context/node.py__init__   s   


zNode.__init__c                 C   s4   zt  | _t t | j| _| jW S    Y dS )Nz	127.0.0.1)socketgethostnamehostnamegethostbynamegetfqdnr	   r   r   r   r   r   &   s   
zNode.get_host_ipr   c                    s(    fddt |D }  j|7  _|S )Nc                    s   g | ]}   qS r   )get_free_port).0ir   r   r   
<listcomp>/   s    z'Node.get_free_ports.<locals>.<listcomp>)ranger
   )r   nr
   r   r   r   get_free_ports.   s   zNode.get_free_portsc                 C   s   | j S )N)r
   r   r   r   r   get_ports_occupied3   s   zNode.get_ports_occupiedr   c              
   C   s   t ttjtj1}|tjtjtddd z|	d|f |
 d W W  d    S    Y W d    dS 1 s>w   Y  d S )Niir   r    )r   r   AF_INETSOCK_STREAM
setsockopt
SOL_SOCKET	SO_LINGERstructpackbindgetsockname)r   portsr   r   r   _get_free_port6   s   $zNode._get_free_portc                 C   s*   |  j d7  _ | j | jkr| j| _ d S d S )Nr   )r   r   r   r   r   r   r   _update_port_curA   s   zNode._update_port_curc                 C   s@   t dD ]}| | j}|dkr|   |  S |   q| jS )Nd   r   )r"   r4   r   r5   )r   _retr   r   r   r   F   s   
zNode.get_free_portc                 C   s   t ttjtj.}ttdr|tjtjd ||t	|f}|dkr/	 W d    dS 	 W d    dS 1 s;w   Y  d S )NSO_REUSEPORTr   r   TF)
r   r   r)   r*   hasattrr+   r,   r9   
connect_exr   )r   r	   r2   sockresultr   r   r   is_server_readyQ   s   
	$zNode.is_server_readyN)r   )r   )__name__
__module____qualname__r   r   r$   r%   r4   r5   r   classmethodr>   r   r   r   r   r      s    

r   )	r   r   r   r.   
contextlibr   r   r   r   r   r   r   r   <module>   s   