socket/option.c: socket option variations
* ext/socket/option.c (NUM2SOCKOPT, sockopt_value): extract to wrap socket option variations. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d1d7f12c89
commit
6282b3b5c3
@ -2,6 +2,16 @@
|
|||||||
|
|
||||||
VALUE rb_cSockOpt;
|
VALUE rb_cSockOpt;
|
||||||
|
|
||||||
|
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
typedef unsigned char rb_sockopt_t;
|
||||||
|
# define NUM2SOCKOPT(value) NUM2CHR(rb_to_int(value))
|
||||||
|
# define sockopt_value(obj) sockopt_byte(obj)
|
||||||
|
# else
|
||||||
|
typedef int rb_sockopt_t;
|
||||||
|
# define NUM2SOCKOPT(value) NUM2INT(rb_to_int(value))
|
||||||
|
# define sockopt_value(obj) sockopt_int(obj)
|
||||||
|
#endif
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
constant_to_sym(int constant, ID (*intern_const)(int))
|
constant_to_sym(int constant, ID (*intern_const)(int))
|
||||||
{
|
{
|
||||||
@ -353,11 +363,7 @@ static VALUE
|
|||||||
sockopt_s_ipv4_multicast_loop(VALUE klass, VALUE value)
|
sockopt_s_ipv4_multicast_loop(VALUE klass, VALUE value)
|
||||||
{
|
{
|
||||||
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_LOOP)
|
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_LOOP)
|
||||||
# if defined(__NetBSD__) || defined(__OpenBSD__)
|
rb_sockopt_t i = NUM2SOCKOPT(value);
|
||||||
unsigned char i = NUM2CHR(rb_to_int(value));
|
|
||||||
# else
|
|
||||||
int i = NUM2INT(rb_to_int(value));
|
|
||||||
# endif
|
|
||||||
return rsock_sockopt_new(AF_INET, IPPROTO_IP, IP_MULTICAST_LOOP,
|
return rsock_sockopt_new(AF_INET, IPPROTO_IP, IP_MULTICAST_LOOP,
|
||||||
rb_str_new((char*)&i, sizeof(i)));
|
rb_str_new((char*)&i, sizeof(i)));
|
||||||
#else
|
#else
|
||||||
@ -383,11 +389,7 @@ sockopt_ipv4_multicast_loop(VALUE self)
|
|||||||
|
|
||||||
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_LOOP)
|
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_LOOP)
|
||||||
if (family == AF_INET && level == IPPROTO_IP && optname == IP_MULTICAST_LOOP) {
|
if (family == AF_INET && level == IPPROTO_IP && optname == IP_MULTICAST_LOOP) {
|
||||||
# if defined(__NetBSD__) || defined(__OpenBSD__)
|
return sockopt_value(self);
|
||||||
return sockopt_byte(self);
|
|
||||||
# else
|
|
||||||
return sockopt_int(self);
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
rb_raise(rb_eTypeError, "ipv4_multicast_loop socket option expected");
|
rb_raise(rb_eTypeError, "ipv4_multicast_loop socket option expected");
|
||||||
@ -416,11 +418,7 @@ static VALUE
|
|||||||
sockopt_s_ipv4_multicast_ttl(VALUE klass, VALUE value)
|
sockopt_s_ipv4_multicast_ttl(VALUE klass, VALUE value)
|
||||||
{
|
{
|
||||||
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_TTL)
|
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_TTL)
|
||||||
# if defined(__NetBSD__) || defined(__OpenBSD__)
|
rb_sockopt_t i = NUM2SOCKOPT(value);
|
||||||
unsigned char i = NUM2CHR(rb_to_int(value));
|
|
||||||
# else
|
|
||||||
int i = NUM2INT(rb_to_int(value));
|
|
||||||
# endif
|
|
||||||
return rsock_sockopt_new(AF_INET, IPPROTO_IP, IP_MULTICAST_TTL,
|
return rsock_sockopt_new(AF_INET, IPPROTO_IP, IP_MULTICAST_TTL,
|
||||||
rb_str_new((char*)&i, sizeof(i)));
|
rb_str_new((char*)&i, sizeof(i)));
|
||||||
#else
|
#else
|
||||||
@ -446,11 +444,7 @@ sockopt_ipv4_multicast_ttl(VALUE self)
|
|||||||
|
|
||||||
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_TTL)
|
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_TTL)
|
||||||
if (family == AF_INET && level == IPPROTO_IP && optname == IP_MULTICAST_TTL) {
|
if (family == AF_INET && level == IPPROTO_IP && optname == IP_MULTICAST_TTL) {
|
||||||
# if defined(__NetBSD__) || defined(__OpenBSD__)
|
return sockopt_value(self);
|
||||||
return sockopt_byte(self);
|
|
||||||
# else
|
|
||||||
return sockopt_int(self);
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
rb_raise(rb_eTypeError, "ipv4_multicast_ttl socket option expected");
|
rb_raise(rb_eTypeError, "ipv4_multicast_ttl socket option expected");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user