sunos: fix uv_udp_set_ttl and uv_udp_set_multicast_loop

It turns out that setsockopt(IP_TTL) *does* expect an int, whereas
setsockopt(IP_MULTICAST_LOOP) needs a char.
This commit is contained in:
Ben Noordhuis 2012-01-28 01:18:01 +01:00
parent 16124bb34e
commit 332b72e589

View File

@ -527,21 +527,21 @@ int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr,
return 0; \
}
X(multicast_loop, IPPROTO_IP, IP_MULTICAST_LOOP)
X(broadcast, SOL_SOCKET, SO_BROADCAST)
X(ttl, IPPROTO_IP, IP_TTL)
#undef X
static int uv__udp_set_ttl(uv_udp_t* handle, int option, int ttl) {
static int uv__setsockopt_maybe_char(uv_udp_t* handle, int option, int val) {
#if __sun
char arg = ttl;
char arg = val;
#else
int arg = ttl;
int arg = val;
#endif
#if __sun
if (ttl < 0 || ttl > 255) {
if (val < 0 || val > 255) {
uv__set_sys_error(handle->loop, EINVAL);
return -1;
}
@ -556,13 +556,13 @@ static int uv__udp_set_ttl(uv_udp_t* handle, int option, int ttl) {
}
int uv_udp_set_ttl(uv_udp_t* handle, int ttl) {
return uv__udp_set_ttl(handle, IP_TTL, ttl);
int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl) {
return uv__setsockopt_maybe_char(handle, IP_MULTICAST_TTL, ttl);
}
int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl) {
return uv__udp_set_ttl(handle, IP_MULTICAST_TTL, ttl);
int uv_udp_set_multicast_loop(uv_udp_t* handle, int on) {
return uv__setsockopt_maybe_char(handle, IP_MULTICAST_LOOP, on);
}