
    Ph                         d dl Z d dlZd dlmZ d dlmZ d dlmZ  ee	      Z
dZdZdZdZ	 	 	 	 	 dded	ed
edededefdZd Zd Zdej                  fdZy)    N)closing)
get_loggerzAddress already in usezSocket Timeoutz_tcp_store/num_membersz_tcp_store/last_member	is_serverserver_addrserver_port
world_sizetimeoutwait_for_workersc           	      D   |dk(  r|dkD  rt        d| d|       |dk7  rt        j                  d|       |dk(  r|nd}	 |dk7  r|}n
t               }t        j                  d|||| |       	 t	        j
                  |||| t        j                  |      |      }	|rt        |	|       t        j                  d	       |	S # t        $ rS}
t        |
      t        k(  r6||k  rt        j                  d
|||       |dz  }nt        d| d| d      |
 Y d }
~
nd }
~
ww xY w)N   zCserver_port must be specified when world_size > 1, got server_port=z, world_size=z+sever_port: %s, specified, ignoring retrieszVCreating c10d store on %s:%s
  world_size  : %s
  is_server   : %s
  timeout(sec): %s
)seconds)	host_nameportr   	is_masterr	   r
   zSuccessfully created c10d storez)port: %s already in use, attempt: [%s/%s]zon z, port: z already in use)
ValueErrorloginfoget_free_portdistTCPStoredatetime	timedelta_check_full_rankRuntimeErrorstr_ADDRESS_IN_USEwarning)r   r   r   r   r	   r
   retriesattemptr   storees              vC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/distributed/elastic/utils/distributed.pycreate_c10d_storer$      s[    bZ!^QR]Q^^klvkwx
 	
 b>L %*gG
"D ?D# z9g	
	MM%%# **7;!1E   
3HH67L 	 1v(W$KKCT7T[ qLG&k](4&H  	9 s   .AC 	DA	DDc                     | j                  t        d      }||k(  r| j                  t        d       	 | j	                  t               y # t
        $ r(}t        |      t        k(  rt        d| d      | d }~ww xY w)Nr   z<val_ignored>ztimed out waiting for all z members to join)	add_MEMBER_CHECKINset_LAST_MEMBER_CHECKINgetr   r   _SOCKET_TIMEOUTTimeoutError)r!   r   idxr"   s       r#   r   r   \   sy    
))OQ
'C
j		&8		&' q6_$,ZL8HI s   A	 		A:#A55A:c                  ~    t               } t        |       5  | j                         d   cd d d        S # 1 sw Y   y xY w)Nr   )get_socket_with_portr   getsockname)socks    r#   r   r   l   s,    !D	!!$ 
s   3<returnc                     t        j                  ddt         j                  t         j                        } | D ]G  }|\  }}}}}t        j                   |||      }	 |j	                  d       |j                  d       |c S  t        d      # t        $ r1}|j                          t        j                  d|       Y d}~d}~ww xY w)	a  
    Returns a free port on localhost that is "reserved" by binding a temporary
    socket on it. Close the socket before passing the port to the entity
    that requires it. Usage example

    ::

    sock = _get_socket_with_port()
    with closing(sock):
        port = sock.getsockname()[1]
        sock.close()
        # there is still a race-condition that some other process
        # may grab this port before func() runs
        func(port)
    	localhostN)hostr   familytype)r4   r   r   zSocket creation attempt failed.)exc_infozFailed to create a socket)socketgetaddrinfo	AF_UNSPECSOCK_STREAMbindlistenOSErrorcloser   r   r   )addrsaddrr6   r7   proto_sr"   s           r#   r/   r/   r   s    " tF,<,<6CUCUE $(!eQMM&$.	DFF#$HHQKH  2
33  	DGGIHH6HCC	Ds   #B	C'CC)r   r   iX  T   )r   r9   
contextlibr   torch.distributeddistributedr   'torch.distributed.elastic.utils.loggingr   __name__r   r   r+   r'   r)   boolr   intfloatr$   r   r   r/        r#   <module>rQ      s         > *"*/  !@@@ @ 	@
 @ @F %4fmm 4rP   