From b1fff186c5cc039a86febe7d2fa7e24c61b68c60 Mon Sep 17 00:00:00 2001 From: Kolja Nowak Date: Wed, 18 May 2022 10:19:31 +0300 Subject: [PATCH] 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: --- src/microhttpd/daemon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 @@ -2985,7 +2985,7 @@ internal_add_connection (struct MHD_Daemon *daemon, return MHD_NO; } - if ( (0 == (daemon->options & MHD_USE_EPOLL)) && + if ( (0 != (daemon->options & MHD_USE_EPOLL)) && (! non_blck) ) { #ifdef HAVE_MESSAGES