diff options
Diffstat (limited to 'ext/kgio/accept.c')
-rw-r--r-- | ext/kgio/accept.c | 9 |
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 |