
    Mh                     b    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
dS )z=The client and server for a basic ping-pong style heartbeat.
    N)Path)Thread)	localhostc                   2    e Zd ZdZddZd Zd Zd Zd ZdS )		Heartbeatz9A simple ping-pong style heartbeat that runs in a thread.Nc                 D   |dt                      df}t          j        | d           || _        |\  | _        | _        | _        | j        | _        | j        dk    r|                                  | j        | j        f| _	        d| _
        d| _        d| _        d| _        dS )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      S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/ipykernel/heartbeat.pyr   zHeartbeat.__init__   s    <9;;*D;////-1*!Y""NNWdi(	"&&*#			    c                 8   | j         dk    rpt          j                    }|                    | j        dk    rdn| j        df           |                                d         | _        |                                 n| j         dk    rwd| _        t          | j         d| j                                                   r?| j        dz   | _        t          | j         d| j                                                   ?nt          d| j         z            | j        S )	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..BBdgq9:::*DIGGIIII^u$$DI$'//DI//007799 * IM	 $'//DI//007799 * =NOOOyr   c                     | j         dk    rdnd}| 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?   sQ    >U**CC{4> ? ?dg ? ?! Cc$)nn TUUUr   c                 ~   	 t           j        }n# t          $ r d }Y nw xY w| j        rdnd}t	          |          D ]}	 |                                   d S # t          j        $ rV}||dz
  k    r |j         t           j        k    r|j         |k    r | j        dk    r| 	                                 n Y d }~zd }~ww xY wd S )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   	,JJ 	 	 	JJJ	
 !.7qqC\** 	 	G%%'''  < 
 
 
lQ...8u///BH
4J4J%**NN$$$$ %$$$$
	 	s$    AB:$AB55B:c                    d| _         | j                            t          j                  | _        d| j        _        	 |                                  n(# t          $ r | j                                          w xY w	 	 t          j	        t          j
        | j        | j                   dS # t          j        $ r}|j        t          j        k    rY d}~W|j        t          j        k    r6	 | j                                         n# t          j        $ r Y nw xY wY d}~dS |j        t          j        k    rY d}~dS  d}~ww xY w)zRun the heartbeat thread.r   i  TN)r
   r   r   r1   ROUTERlingerr8   	Exceptionr"   deviceQUEUEr2   r-   EINTRETERMENOTSOCK)r   es     r   runzHeartbeat.run]   s]   	l))#*55!	 	 	 	K		
39dk4;???& % <   7ek))HHHH7ci''))++++<     EEEEE7cl**EEEEE!sY   A %A8=*B) )D>8D9D9(DD9DD9DD9D98D99D>)N)	__name__
__module____qualname____doc__r   r   r*   r8   rC    r   r   r   r      sm        CC           V V V  4         r   r   )rG   r-   r   pathlibr   	threadingr   r1   jupyter_client.localinterfacesr   r   rH   r   r   <module>rL      s                   



 4 4 4 4 4 4a a a a a a a a a ar   