Hi,
I'm trying to use libmicrohttpd on a platform where fcntl(fd, O_NONBLOCK)
doesn't work for sockets. This shouldn't be a problem, as far as I understand,
except in epoll mode, which I'm not using, because epoll() isn't available
either.
However, there is a check in daemon.c:internal_add_connection(), the purpose of
which seems to be to prevent using a blocking socket in epoll mode. At least
that's what the debug message says. The code however does the opposite, it
prevents the use of a blocking socket if epoll mode is *not* used. This was
probably never noticed because platforms without non-blocking sockets are rare.
Please consider applying the following simple fix:
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 64524b1b..8308e6ef 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -2983,11 +2983,11 @@ internal_add_connection (struct MHD_Daemon *daemon,
errno = ENFILE;
#endif
return MHD_NO;
}
- if ( (0 == (daemon->options & MHD_USE_EPOLL)) &&
+ if ( (0 != (daemon->options & MHD_USE_EPOLL)) &&
(! non_blck) )
{
#ifdef HAVE_MESSAGES
MHD_DLOG (daemon,
_ ("Epoll mode supports only non-blocking sockets\n"));
--
Greetings,
Kolja Nowak.