summaryrefslogtreecommitdiffhomepage
path: root/src/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/socket.c')
-rw-r--r--src/socket.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/socket.c b/src/socket.c
index e28d7cd5d..44534827a 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -433,8 +433,13 @@ mrb_basicsocket_setsockopt(mrb_state *mrb, mrb_value self)
mrb_int i = mrb_test(optval) ? 1 : 0;
optval = mrb_str_new(mrb, (char *)&i, sizeof(i));
} else if (mrb_fixnum_p(optval)) {
- mrb_int i = mrb_fixnum(optval);
- optval = mrb_str_new(mrb, (char *)&i, sizeof(i));
+ if (optname == IP_MULTICAST_TTL || optname == IP_MULTICAST_LOOP) {
+ char uc = mrb_fixnum(optval);
+ optval = mrb_str_new(mrb, &uc, sizeof(uc));
+ } else {
+ mrb_int i = mrb_fixnum(optval);
+ optval = mrb_str_new(mrb, (char *)&i, sizeof(i));
+ }
} else {
mrb_raise(mrb, E_ARGUMENT_ERROR, "optval should be true, false, an integer, or a string");
}