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:
parent
d1d7f12c89
commit
6282b3b5c3
1 changed files with 14 additions and 20 deletions
|
@ -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");
|
||||
|
|
Loading…
Reference in a new issue