about summary refs log tree commit homepage
path: root/ext/kgio/accept.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/kgio/accept.c')
-rw-r--r--ext/kgio/accept.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/ext/kgio/accept.c b/ext/kgio/accept.c
index 4762676..4856234 100644
--- a/ext/kgio/accept.c
+++ b/ext/kgio/accept.c
@@ -56,8 +56,15 @@ static VALUE get_accepted(VALUE klass)
 static VALUE xaccept(void *ptr)
 {
         struct accept_args *a = ptr;
+        int rv;
+
+        rv = accept_fn(a->fd, a->addr, a->addrlen, accept4_flags);
+        if (rv == -1 && errno == ENOSYS && accept_fn != my_accept4) {
+                accept_fn = my_accept4;
+                rv = accept_fn(a->fd, a->addr, a->addrlen, accept4_flags);
+        }
 
-        return (VALUE)accept4(a->fd, a->addr, a->addrlen, accept4_flags);
+        return (VALUE)rv;
 }
 
 #ifdef HAVE_RB_THREAD_BLOCKING_REGION