diff options
| author | Tomoyuki Sahara <[email protected]> | 2017-06-13 12:13:04 +0900 |
|---|---|---|
| committer | Tomoyuki Sahara <[email protected]> | 2017-06-13 12:13:04 +0900 |
| commit | 81a0dcdb7a83f618e572d0dd7be3e99587d1a84d (patch) | |
| tree | ba3b7b42e9b3751c50fa9ce564cb81c0a898143e /src | |
| parent | 3dad125a1cd93e70a1762e9c6a1d5e01554ad71c (diff) | |
| download | mruby-81a0dcdb7a83f618e572d0dd7be3e99587d1a84d.tar.gz mruby-81a0dcdb7a83f618e572d0dd7be3e99587d1a84d.zip | |
sizeof(optval) must be 1 for IP_MULTICAST_TTL & IP_MULTICAST_LOOP. fixes #34.
Diffstat (limited to 'src')
| -rw-r--r-- | src/socket.c | 9 |
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"); } |
