
    x-j	                     X    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          ZdS )    N)closing   )Devicec                   R    e Zd Zd Zd ZddZd ZddZd Zd	 Z	e
d
             ZdS )Nodec                    t          j                    | _        |                                 | _        g | _        g | _        t          j        dd          }|	                    d          }t          |d                   | _        t          |d                   | _        t          j        | j        | j                  | _        d S )N
PORT_RANGEz35100:64000:r   r   )r   parse_devicedeviceget_host_ipip
free_ports_allocated_portsosgetenvsplitint_port_start	_port_endrandomrandint	_port_cur)self
port_ranges     f/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/distributed/launch/context/node.py__init__zNode.__init__   s    )++""$$ "Y|];;
%%c**
z!}--Z]++(8$.II    c                     	 t          j                    | _        t          j        t          j        | j                            | _        | j        S #  Y dS xY w)Nz	127.0.0.1)socketgethostnamehostnamegethostbynamegetfqdnr   r   s    r   r   zNode.get_host_ip&   sL    	".00DM*6>$-+H+HIIDG7N	;;s   AA Ar   r   c                 d    t           j                            d          , fdt          |          D             } xj        |z  c_        nct          t           j                            d                    }t          t          ||z   ||z   |z   d                    } xj        |z  c_        |S )NFLAGS_FIXED_PORTc                 8    g | ]}                                 S  )get_free_port).0ir   s     r   
<listcomp>z'Node.get_free_ports.<locals>.<listcomp>0   s%    AAA1$,,..AAAr   r   )r   environgetranger   r   list)r   nrankr   
start_ports   `    r   get_free_portszNode.get_free_ports.   s    :>>,--5AAAAaAAAJOOz)OOORZ^^,>??@@Jj4'd):Q)>BB J OOz)OOr   c                     | j         S )N)r   r%   s    r   get_ports_occupiedzNode.get_ports_occupied:   s
    r   c           
         t          t          j        t          j        t          j                            5 }|                    t          j        t          j        t          j        ddd                     	 |	                    d|f           |
                                d         cd d d            S #  Y d d d            dS xY w# 1 swxY w Y   d S )Niir   r    )r   r    AF_INETSOCK_STREAM
setsockopt
SOL_SOCKET	SO_LINGERstructpackbindgetsockname)r   portss      r   _get_free_portzNode._get_free_port=   s   V]6>63EFFGG 	1LL!6#3V[q!5L5L  Dz"""}}q)	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s*   A C80B55C7CCCCc                 b    | xj         dz  c_         | j         | j        k    r| j        | _         d S d S )Nr   )r   r   r   r%   s    r   _update_port_curzNode._update_port_curH   s7    !>DN**!-DNNN +*r   c                     t          d          D ]N}|                     | j                  }|dk    r|                                  |c S |                                  O| j        S )Nd   r   )r0   rG   r   rI   )r   _rets      r   r*   zNode.get_free_portM   sm    s 	( 	(A%%dn55CQww%%'''


%%''''~r   c                    t          t          j        t          j        t          j                            5 }t	          t          d          r+|                    t          j        t          j        d           |                    |t          |          f          }|dk    r	 d d d            dS 	 d d d            dS # 1 swxY w Y   d S )NSO_REUSEPORTr   r   TF)
r   r    r<   r=   hasattrr>   r?   rO   
connect_exr   )r   r   rE   sockresults        r   is_server_readyzNode.is_server_readyX   s   V]6>63EFFGG 		4 v~.. K 163FJJJ__b#d))_55F{{		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   A,B>0B>>CCN)r   r   )r   )__name__
__module____qualname__r   r   r5   r7   rG   rI   r*   classmethodrT   r)   r   r   r   r      s        J J J  
 
 
 
  	 	 	 	. . .
	 	 	 
 
 [
 
 
r   r   )	r   r   r    rA   
contextlibr   r   r   r   r)   r   r   <module>rZ      s    
			               K K K K K K K K K Kr   