diff --git a/server.py b/server.py index f718133f0e9c72914e4f39932cf452b92cf8e062..083fe558dcd803570606c02b91bb5a75490568db 100644 --- a/server.py +++ b/server.py @@ -305,15 +305,20 @@ class Server(): time.sleep(self.heartbeat_interval) def heartbeat_subscriber(self, multicast_socket): + + multicast_socket.settimeout(3) + while True: - data, address = multicast_socket.recvfrom(1024) - if data: - self.leader_heartbeat_last_received = time.time() - sender_ip = address[0] - if sender_ip != MY_IP: - print(f"Received heartbeat from {sender_ip}: {data.decode()}") + try: + data, address = multicast_socket.recvfrom(1024) + if data: + self.leader_heartbeat_last_received = time.time() + sender_ip = address[0] + if sender_ip != MY_IP: + print(f"Received heartbeat from {sender_ip}: {data.decode()}") - else: + # Wenn kein Heartbeat empfangen wurde + except socket.timeout: time_since_last_heartbeat = time.time() - self.leader_heartbeat_last_received if time_since_last_heartbeat > self.heartbeat_interval: self.missed_heartbeats += 1 @@ -328,7 +333,7 @@ class Server(): self.missed_heartbeats = 0 # Code to initiate a new voting process to elect a new leader # This could involve calling a function from voting.py or similar logic - time.sleep(self.heartbeat_interval) + time.sleep(self.heartbeat_interval) # starting all simultaneously working procedures