From 0ef079617b7d71cc26574247918c4a3e18454b21 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 19 Mar 2011 18:29:15 -0700 Subject: accept: prepare optional flags argument to accept() wrappers Don't force people to rely on global flags, there may be blocking parts of an otherwise non-blocking program... --- ext/kgio/accept.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ext/kgio/accept.c b/ext/kgio/accept.c index 2026a78..b8efba5 100644 --- a/ext/kgio/accept.c +++ b/ext/kgio/accept.c @@ -16,6 +16,7 @@ static int accept4_flags = SOCK_CLOEXEC | SOCK_NONBLOCK; struct accept_args { int fd; + int flags; struct sockaddr *addr; socklen_t *addrlen; }; @@ -58,10 +59,10 @@ static VALUE xaccept(void *ptr) struct accept_args *a = ptr; int rv; - rv = accept_fn(a->fd, a->addr, a->addrlen, accept4_flags); + rv = accept_fn(a->fd, a->addr, a->addrlen, a->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); + rv = accept_fn(a->fd, a->addr, a->addrlen, a->flags); } return (VALUE)rv; @@ -151,6 +152,7 @@ my_accept(VALUE accept_io, VALUE klass, a.fd = my_fileno(accept_io); a.addr = addr; a.addrlen = addrlen; + a.flags = accept4_flags; retry: client = thread_accept(&a, nonblock); if (client == -1) { -- cgit v1.2.3-24-ge0c7