From 949bf6ca4306125b0ba51d8b09a1f4d642c24753 Mon Sep 17 00:00:00 2001 From: Takeshi Watanabe Date: Sat, 9 Dec 2017 18:44:24 +0900 Subject: Fix socket closing by using `closesocket` API in windows instead. --- mrbgems/mruby-socket/mrblib/socket.rb | 1 + mrbgems/mruby-socket/src/socket.c | 18 ++++++++++++++++++ mrbgems/mruby-socket/test/unix.rb | 4 ---- 3 files changed, 19 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-socket') diff --git a/mrbgems/mruby-socket/mrblib/socket.rb b/mrbgems/mruby-socket/mrblib/socket.rb index 53c20e3cc..d817300c6 100644 --- a/mrbgems/mruby-socket/mrblib/socket.rb +++ b/mrbgems/mruby-socket/mrblib/socket.rb @@ -178,6 +178,7 @@ class BasicSocket def initialize(*args) super(*args) + self.is_socket = true @do_not_reverse_lookup = @@do_not_reverse_lookup end diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c index 76eb8a674..937c33011 100644 --- a/mrbgems/mruby-socket/src/socket.c +++ b/mrbgems/mruby-socket/src/socket.c @@ -40,6 +40,8 @@ #include "mruby/variable.h" #include "error.h" +#include "mruby/ext/io.h" + #define E_SOCKET_ERROR (mrb_class_get(mrb, "SocketError")) #if !defined(mrb_cptr) @@ -479,6 +481,21 @@ mrb_basicsocket_shutdown(mrb_state *mrb, mrb_value self) return mrb_fixnum_value(0); } +static mrb_value +mrb_basicsocket_set_is_socket(mrb_state *mrb, mrb_value self) +{ + mrb_bool b; + struct mrb_io *io_p; + mrb_get_args(mrb, "b", &b); + + io_p = (struct mrb_io*)DATA_PTR(self); + if (io_p) { + io_p->is_socket = b; + } + + return mrb_bool_value(b); +} + static mrb_value mrb_ipsocket_ntop(mrb_state *mrb, mrb_value klass) { @@ -839,6 +856,7 @@ mrb_mruby_socket_gem_init(mrb_state* mrb) // #sendmsg_nonblock mrb_define_method(mrb, bsock, "setsockopt", mrb_basicsocket_setsockopt, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(2)); mrb_define_method(mrb, bsock, "shutdown", mrb_basicsocket_shutdown, MRB_ARGS_OPT(1)); + mrb_define_method(mrb, bsock, "is_socket=", mrb_basicsocket_set_is_socket, MRB_ARGS_REQ(1)); ipsock = mrb_define_class(mrb, "IPSocket", bsock); mrb_define_class_method(mrb, ipsock, "ntop", mrb_ipsocket_ntop, MRB_ARGS_REQ(1)); diff --git a/mrbgems/mruby-socket/test/unix.rb b/mrbgems/mruby-socket/test/unix.rb index 1eb7365c5..88ad17101 100644 --- a/mrbgems/mruby-socket/test/unix.rb +++ b/mrbgems/mruby-socket/test/unix.rb @@ -1,5 +1,3 @@ -unless SocketTest.win? - def unixserver_test_block path = SocketTest.tmppath File.unlink path rescue nil @@ -126,5 +124,3 @@ assert('UNIXSocket#recvfrom') do # a[1][1] would be "" or something end end - -end # win? -- cgit v1.2.3