udp: fix uv__udp_set_source_membership6
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é <saghul@gmail.com>
This commit is contained in:
parent
9efc1961fe
commit
f91702a470
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user