summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-socket
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-socket')
-rw-r--r--mrbgems/mruby-socket/mrblib/socket.rb6
-rw-r--r--mrbgems/mruby-socket/src/socket.c15
2 files changed, 18 insertions, 3 deletions
diff --git a/mrbgems/mruby-socket/mrblib/socket.rb b/mrbgems/mruby-socket/mrblib/socket.rb
index ab54b7d31..0e7bbdcc1 100644
--- a/mrbgems/mruby-socket/mrblib/socket.rb
+++ b/mrbgems/mruby-socket/mrblib/socket.rb
@@ -302,7 +302,7 @@ class TCPServer < TCPSocket
end
def sysaccept
- Socket._accept(self.fileno)[0]
+ Socket._accept(self.fileno)
end
end
@@ -463,7 +463,7 @@ class Socket < BasicSocket
end
def sysaccept
- Socket._accept(self.fileno)
+ Socket._accept2(self.fileno)
end
end
@@ -566,7 +566,7 @@ class UNIXServer < UNIXSocket
end
def sysaccept
- Socket._accept(self.fileno)[0]
+ Socket._accept(self.fileno)
end
end
diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c
index a4e1d483a..4d56d5374 100644
--- a/mrbgems/mruby-socket/src/socket.c
+++ b/mrbgems/mruby-socket/src/socket.c
@@ -589,6 +589,20 @@ mrb_socket_gethostname(mrb_state *mrb, mrb_value cls)
static mrb_value
mrb_socket_accept(mrb_state *mrb, mrb_value klass)
{
+ int s1;
+ mrb_int s0;
+
+ mrb_get_args(mrb, "i", &s0);
+ s1 = (int)accept(s0, NULL, NULL);
+ if (s1 == -1) {
+ mrb_sys_fail(mrb, "accept");
+ }
+ return mrb_fixnum_value(s1);
+}
+
+static mrb_value
+mrb_socket_accept2(mrb_state *mrb, mrb_value klass)
+{
mrb_value ary, sastr;
int s1;
mrb_int s0;
@@ -872,6 +886,7 @@ mrb_mruby_socket_gem_init(mrb_state* mrb)
sock = mrb_define_class(mrb, "Socket", bsock);
mrb_define_class_method(mrb, sock, "_accept", mrb_socket_accept, MRB_ARGS_REQ(1));
+ mrb_define_class_method(mrb, sock, "_accept2", mrb_socket_accept2, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, sock, "_bind", mrb_socket_bind, MRB_ARGS_REQ(3));
mrb_define_class_method(mrb, sock, "_connect", mrb_socket_connect, MRB_ARGS_REQ(3));
mrb_define_class_method(mrb, sock, "_listen", mrb_socket_listen, MRB_ARGS_REQ(2));