Skip to content

Commit bf0f2ff

Browse files
committed
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 <jordan@embeint.com>
1 parent effd615 commit bf0f2ff

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

src/infuse_iot/socket_comms.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ def __init__(self, multicast_address):
235235
# Multicast output socket
236236
self._output_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
237237
self._output_sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
238+
self._output_sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton("127.0.0.1"))
238239
self._output_addr = multicast_address
239240
# Single input socket
240241
unicast_address = ("localhost", multicast_address[1] + 1)
@@ -266,7 +267,7 @@ def __init__(self, multicast_address, rx_timeout=0.2):
266267
self._input_sock.bind(("", multicast_address[1]))
267268
else:
268269
self._input_sock.bind(multicast_address)
269-
mreq = struct.pack("4sl", socket.inet_aton(multicast_address[0]), socket.INADDR_ANY)
270+
mreq = struct.pack("4s4s", socket.inet_aton(multicast_address[0]), socket.inet_aton("127.0.0.1"))
270271
self._input_sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
271272
self._input_sock.settimeout(rx_timeout)
272273
# Unicast output socket

0 commit comments

Comments
 (0)