From 81a0dcdb7a83f618e572d0dd7be3e99587d1a84d Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Tue, 13 Jun 2017 12:13:04 +0900 Subject: sizeof(optval) must be 1 for IP_MULTICAST_TTL & IP_MULTICAST_LOOP. fixes #34. --- src/socket.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/socket.c') 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"); } -- cgit v1.2.3