Merge ae1d2ae2a7 into 901e28384b
This commit is contained in:
commit
8a4490d10d
@ -749,6 +749,20 @@ int uv__udp_try_send(uv_udp_t* handle,
|
|||||||
return uv__count_bufs(bufs, nbufs);
|
return uv__count_bufs(bufs, nbufs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int uv__udp_membership_optname(uv_membership membership, int join_opt,
|
||||||
|
int leave_opt, int* optname) {
|
||||||
|
|
||||||
|
switch (membership) {
|
||||||
|
case UV_JOIN_GROUP:
|
||||||
|
*optname = join_opt;
|
||||||
|
return 0;
|
||||||
|
case UV_LEAVE_GROUP:
|
||||||
|
*optname = leave_opt;
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return UV_EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int uv__udp_set_membership4(uv_udp_t* handle,
|
static int uv__udp_set_membership4(uv_udp_t* handle,
|
||||||
const struct sockaddr_in* multicast_addr,
|
const struct sockaddr_in* multicast_addr,
|
||||||
@ -770,16 +784,10 @@ static int uv__udp_set_membership4(uv_udp_t* handle,
|
|||||||
|
|
||||||
mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr;
|
mreq.imr_multiaddr.s_addr = multicast_addr->sin_addr.s_addr;
|
||||||
|
|
||||||
switch (membership) {
|
err = uv__udp_membership_optname(membership, IP_ADD_MEMBERSHIP,
|
||||||
case UV_JOIN_GROUP:
|
IP_DROP_MEMBERSHIP, &optname);
|
||||||
optname = IP_ADD_MEMBERSHIP;
|
if (err)
|
||||||
break;
|
return err;
|
||||||
case UV_LEAVE_GROUP:
|
|
||||||
optname = IP_DROP_MEMBERSHIP;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return UV_EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setsockopt(handle->io_watcher.fd,
|
if (setsockopt(handle->io_watcher.fd,
|
||||||
IPPROTO_IP,
|
IPPROTO_IP,
|
||||||
@ -804,6 +812,7 @@ static int uv__udp_set_membership6(uv_udp_t* handle,
|
|||||||
int optname;
|
int optname;
|
||||||
struct ipv6_mreq mreq;
|
struct ipv6_mreq mreq;
|
||||||
struct sockaddr_in6 addr6;
|
struct sockaddr_in6 addr6;
|
||||||
|
int err;
|
||||||
|
|
||||||
memset(&mreq, 0, sizeof mreq);
|
memset(&mreq, 0, sizeof mreq);
|
||||||
|
|
||||||
@ -817,16 +826,10 @@ static int uv__udp_set_membership6(uv_udp_t* handle,
|
|||||||
|
|
||||||
mreq.ipv6mr_multiaddr = multicast_addr->sin6_addr;
|
mreq.ipv6mr_multiaddr = multicast_addr->sin6_addr;
|
||||||
|
|
||||||
switch (membership) {
|
err = uv__udp_membership_optname(membership, IPV6_ADD_MEMBERSHIP,
|
||||||
case UV_JOIN_GROUP:
|
IPV6_DROP_MEMBERSHIP, &optname);
|
||||||
optname = IPV6_ADD_MEMBERSHIP;
|
if (err)
|
||||||
break;
|
return err;
|
||||||
case UV_LEAVE_GROUP:
|
|
||||||
optname = IPV6_DROP_MEMBERSHIP;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return UV_EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setsockopt(handle->io_watcher.fd,
|
if (setsockopt(handle->io_watcher.fd,
|
||||||
IPPROTO_IPV6,
|
IPPROTO_IPV6,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user