1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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:
nobu 2014-01-19 01:11:01 +00:00
parent d1d7f12c89
commit 6282b3b5c3

View file

@ -2,6 +2,16 @@
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
constant_to_sym(int constant, ID (*intern_const)(int))
{
@ -353,11 +363,7 @@ static VALUE
sockopt_s_ipv4_multicast_loop(VALUE klass, VALUE value)
{
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_LOOP)
# if defined(__NetBSD__) || defined(__OpenBSD__)
unsigned char i = NUM2CHR(rb_to_int(value));
# else
int i = NUM2INT(rb_to_int(value));
# endif
rb_sockopt_t i = NUM2SOCKOPT(value);
return rsock_sockopt_new(AF_INET, IPPROTO_IP, IP_MULTICAST_LOOP,
rb_str_new((char*)&i, sizeof(i)));
#else
@ -383,11 +389,7 @@ sockopt_ipv4_multicast_loop(VALUE self)
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_LOOP)
if (family == AF_INET && level == IPPROTO_IP && optname == IP_MULTICAST_LOOP) {
# if defined(__NetBSD__) || defined(__OpenBSD__)
return sockopt_byte(self);
# else
return sockopt_int(self);
# endif
return sockopt_value(self);
}
#endif
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)
{
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_TTL)
# if defined(__NetBSD__) || defined(__OpenBSD__)
unsigned char i = NUM2CHR(rb_to_int(value));
# else
int i = NUM2INT(rb_to_int(value));
# endif
rb_sockopt_t i = NUM2SOCKOPT(value);
return rsock_sockopt_new(AF_INET, IPPROTO_IP, IP_MULTICAST_TTL,
rb_str_new((char*)&i, sizeof(i)));
#else
@ -446,11 +444,7 @@ sockopt_ipv4_multicast_ttl(VALUE self)
#if defined(IPPROTO_IP) && defined(IP_MULTICAST_TTL)
if (family == AF_INET && level == IPPROTO_IP && optname == IP_MULTICAST_TTL) {
# if defined(__NetBSD__) || defined(__OpenBSD__)
return sockopt_byte(self);
# else
return sockopt_int(self);
# endif
return sockopt_value(self);
}
#endif
rb_raise(rb_eTypeError, "ipv4_multicast_ttl socket option expected");