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;