From de64624a36c171d9fec12fa30438d1e0aeed1ac0 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 28 May 2021 05:21:22 -1000 Subject: [PATCH] Fix IPv6 setup under MacOS when binding to "" - Setting IP_MULTICAST_TTL and IP_MULTICAST_LOOP does not work under MacOS when the bind address is "" --- zeroconf/__init__.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/zeroconf/__init__.py b/zeroconf/__init__.py index 4bb565bc..e90e90fa 100644 --- a/zeroconf/__init__.py +++ b/zeroconf/__init__.py @@ -2235,8 +2235,12 @@ def new_socket( if ip_version != IPVersion.V6Only: # OpenBSD needs the ttl and loop values for the IP_MULTICAST_TTL and # IP_MULTICAST_LOOP socket options as an unsigned char. - s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl) - s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, loop) + try: + s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl) + s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, loop) + except socket.error as e: + if bind_addr[0] != '' or get_errno(e) != errno.EINVAL: # Fails to set on MacOS + raise if ip_version != IPVersion.V4Only: # However, char doesn't work here (at least on Linux) s.setsockopt(_IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, 255)