From b6d9d20a926a2729ca0bbb59b3c62a40dd9f131e Mon Sep 17 00:00:00 2001 From: Jordan Yates Date: Thu, 27 Nov 2025 14:38:21 +1000 Subject: [PATCH] socket_comms: explicit multicast interface Explicitly specify the "localhost" interface for the multicast sockets. Fixes various edge cases on MacOS. Signed-off-by: Jordan Yates --- src/infuse_iot/socket_comms.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/infuse_iot/socket_comms.py b/src/infuse_iot/socket_comms.py index 35db5ef..99513a8 100644 --- a/src/infuse_iot/socket_comms.py +++ b/src/infuse_iot/socket_comms.py @@ -235,6 +235,7 @@ def __init__(self, multicast_address): # Multicast output socket self._output_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) self._output_sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) + self._output_sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton("127.0.0.1")) self._output_addr = multicast_address # Single input socket unicast_address = ("localhost", multicast_address[1] + 1) @@ -266,7 +267,7 @@ def __init__(self, multicast_address, rx_timeout=0.2): self._input_sock.bind(("", multicast_address[1])) else: self._input_sock.bind(multicast_address) - mreq = struct.pack("4sl", socket.inet_aton(multicast_address[0]), socket.INADDR_ANY) + mreq = struct.pack("4s4s", socket.inet_aton(multicast_address[0]), socket.inet_aton("127.0.0.1")) self._input_sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) self._input_sock.settimeout(rx_timeout) # Unicast output socket