
    Xh                     Z    d Z ddlZddlZddlmZ ddlmZ ddlZddlm	Z	  G d de      Z
y)z=The client and server for a basic ping-pong style heartbeat.
    N)Path)Thread)	localhostc                   0    e Zd ZdZddZd Zd Zd Zd Zy)		Heartbeatz9A simple ping-pong style heartbeat that runs in a thread.Nc                 Z   |dt               df}t        j                  | d       || _        |\  | _        | _        | _        | j                  | _        | j                  dk(  r| j                          | j
                  | j                  f| _	        d| _
        d| _        d| _        d| _        y)z Initialize the heartbeat thread.Ntcpr   r   )nameT)r   r   __init__context	transportipportoriginal_port	pick_portaddrdaemonpydev_do_not_traceis_pydev_daemon_threadr
   )selfr   r   s      G/var/www/html/myenv/lib/python3.12/site-packages/ipykernel/heartbeat.pyr   zHeartbeat.__init__   s    <9;*D;/-1*!YY"NNWWdii(	"&&*#	    c                 r   | j                   dk(  rvt        j                         }|j                  | j                  dk(  rdn| j                  df       |j	                         d   | _        |j                          | j
                  S | j                   dk(  rd| _        t        | j                   d| j
                         j                         rG| j
                  dz   | _        t        | j                   d| j
                         j                         rG| j
                  S t        d| j                   z        )	zPick a port for the heartbeat.r	   * r      ipc-zUnrecognized zmq transport: %s)
r   socketbindr   getsocknamer   closer   exists
ValueError)r   ss     r   r   zHeartbeat.pick_port/   s    >>U"AFF$''S.Bdggq9:*DIGGI yy ^^u$DI$''!DII;/0779 IIM	 $''!DII;/0779 yy =NOOr   c                     | j                   dk(  rdnd}| j                  j                  | j                    d| j                   |z   t	        | j
                        z         S )Nr	   :r   z://)r   r   r    r   strr   )r   cs     r   _try_bind_socketzHeartbeat._try_bind_socket?   sO    >>U*C{{4>>"2#dggY ?! Cc$))n TUUr   c                    	 t         j                  }| j                  rdnd}t	        |      D ]  }	 | j                           y  y # t        $ r d }Y @w xY w# t        j                  $ ra}||dz
  k(  r |j                   t         j                  k7  r|j                   |k7  r | j                  dk(  r| j                          n Y d }~d }~ww xY w)Nr   d   r   )
errnoWSAEADDRINUSEAttributeErrorr   ranger*   zmqZMQError
EADDRINUSEr   )r   
win_in_usemax_attemptsattemptzes        r   _bind_socketzHeartbeat._bind_socketC   s    	,,J !..qC\* 	G%%' 	  	J	 << 
lQ..88u///BHH
4J%%*NN$ %
s)   A AAAC
)ACC
c                    d| _         | j                  j                  t        j                        | _        d| j                  _        	 | j                          	 	 t        j                  t        j                  | j                  | j                         y# t        $ r | j                  j                           w xY w# t        j                  $ r}|j                  t        j                  k(  rY d}~|j                  t        j                  k(  r:	 | j                  j                          n# t        j                  $ r Y nw xY wY d}~y|j                  t        j                  k(  rY d}~y d}~ww xY w)zRun the heartbeat thread.r   i  N)r
   r   r   r1   ROUTERlingerr8   	Exceptionr"   deviceQUEUEr2   r-   EINTRETERMENOTSOCK)r   es     r   runzHeartbeat.run]   s   	ll))#**5!	
 

399dkk4;;?& 3  	KK	 << 77ekk)77cii'))+<<   77cll*!sZ   B 9B< %B9<E0E+1E+D*)E+*E =E+?E  E+E+*E++E0)N)	__name__
__module____qualname____doc__r   r   r*   r8   rC    r   r   r   r      s    C   V4 r   r   )rG   r-   r   pathlibr   	threadingr   r1   jupyter_client.localinterfacesr   r   rH   r   r   <module>rL      s,        
 4a ar   