
    xd                     ^    d Z ddlZddlZddl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)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      3lib/python3.11/site-packages/ipykernel/heartbeat.pyr
   zHeartbeat.__init__   s    <9;;*D;////-1*!Y""NNWdi(	"&&*#			    c                 0   | j         dk    rpt          j                    }|                    | j        dk    rdn| j        df           |                                d         | _        |                                 n| j         dk    rsd| _        t          j        	                    | j         d| j                   r=| j        dz   | _        t          j        	                    | 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   closeospathexists
ValueError)r   ss     r   r   zHeartbeat.pick_port/   s    >U""AFF$'S..BBdgq9:::*DIGGIIII^u$$DI'..DG!9!9di!9!9:: * IM	 '..DG!9!9di!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   r2   ROUTERlingerr9   	Exceptionr!   deviceQUEUEr3   r.   EINTRETERMENOTSOCK)r   es     r   runzHeartbeat.run]   s]   	l))#*55!	 	 	 	K		
39dk4;???( ' <   7ek))HHHHW	))))++++<     EEEEEW,,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+   r9   rD    r   r   r   r      sm        CC           V V V  4! ! ! ! !r   r   )
rH   r.   r"   r   	threadingr   r2   jupyter_client.localinterfacesr   r   rI   r   r   <module>rL      s      				        



 4 4 4 4 4 4b b b b b b b b b br   