From f91702a470ffc12af2f8d0c4a5b806f5c6907049 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Thu, 21 Feb 2019 06:34:14 +0100 Subject: [PATCH] udp: fix uv__udp_set_source_membership6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use the correct socket options: `MCAST_JOIN_SOURCE_GROUP` and `MCAST_LEAVE_SOURCE_GROUP`. Set mreq.gsr_interface = 0 if iface_addr = NULL. PR-URL: https://github.com/libuv/libuv/pull/2202 Reviewed-By: Saúl Ibarra Corretgé --- src/unix/udp.c | 6 ++++-- src/win/udp.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/unix/udp.c b/src/unix/udp.c index f884e77a..7e4095c6 100644 --- a/src/unix/udp.c +++ b/src/unix/udp.c @@ -725,15 +725,17 @@ static int uv__udp_set_source_membership6(uv_udp_t* handle, if (err) return err; mreq.gsr_interface = addr6.sin6_scope_id; + } else { + mreq.gsr_interface = 0; } memcpy(&mreq.gsr_group, multicast_addr, sizeof(mreq.gsr_group)); memcpy(&mreq.gsr_source, source_addr, sizeof(mreq.gsr_source)); if (membership == UV_JOIN_GROUP) - optname = IP_ADD_SOURCE_MEMBERSHIP; + optname = MCAST_JOIN_SOURCE_GROUP; else if (membership == UV_LEAVE_GROUP) - optname = IP_DROP_SOURCE_MEMBERSHIP; + optname = MCAST_LEAVE_SOURCE_GROUP; else return UV_EINVAL; diff --git a/src/win/udp.c b/src/win/udp.c index 41967ac4..3e74274b 100644 --- a/src/win/udp.c +++ b/src/win/udp.c @@ -782,15 +782,17 @@ int uv__udp_set_source_membership6(uv_udp_t* handle, if (err) return err; mreq.gsr_interface = addr6.sin6_scope_id; + } else { + mreq.gsr_interface = 0; } memcpy(&mreq.gsr_group, multicast_addr, sizeof(mreq.gsr_group)); memcpy(&mreq.gsr_source, source_addr, sizeof(mreq.gsr_source)); if (membership == UV_JOIN_GROUP) - optname = IP_ADD_SOURCE_MEMBERSHIP; + optname = MCAST_JOIN_SOURCE_GROUP; else if (membership == UV_LEAVE_GROUP) - optname = IP_DROP_SOURCE_MEMBERSHIP; + optname = MCAST_LEAVE_SOURCE_GROUP; else return UV_EINVAL;