summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-socket/src/socket.c
diff options
context:
space:
mode:
authorTakeshi Watanabe <[email protected]>2017-12-09 18:44:24 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-12-14 00:05:23 +0900
commit949bf6ca4306125b0ba51d8b09a1f4d642c24753 (patch)
tree0c719cb0cfc4bfa1b897892ac47722f9fec1943f /mrbgems/mruby-socket/src/socket.c
parent2300c9f7373e3785d36323b5d2820efb40fb1fab (diff)
downloadmruby-949bf6ca4306125b0ba51d8b09a1f4d642c24753.tar.gz
mruby-949bf6ca4306125b0ba51d8b09a1f4d642c24753.zip
Fix socket closing by using `closesocket` API in windows instead.
Diffstat (limited to 'mrbgems/mruby-socket/src/socket.c')
-rw-r--r--mrbgems/mruby-socket/src/socket.c18
1 files changed, 18 insertions, 0 deletions
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)
@@ -480,6 +482,21 @@ mrb_basicsocket_shutdown(mrb_state *mrb, mrb_value self)
}
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)
{
mrb_int af, n;
@@ -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));