I cannot get `MHD_add_connection` to work at all, regardless of the flags I pass to `MHD_start_daemon`.
Environment: Debian 10, libmicrohttpd 0.9.62 I've attached a test that I tried to get workin to no avail. I never get an error but microhttpd never starts up the epoll thread either, in fact if I start_daemon then stop_daemon with NO_LISTEN_SOCKET I get an error from mhd because it cannot join the non-existent thread. I've tried using USE_EPOLL + MHD_run() which didn't do anything. I've tried creating a second listen socket, which I don't use, and passing it to start_daemon without the no listen socket. This does force the epoll thread to be created but add_connection still doesn't work. I'm obviously missing something basic. Examples are few and far between. Thanks for help in advance! Damon Sample Output of test.c below $ ./test daemon 0x55c2bb065ea0 MHD_add_conntection() returned 1 // test.c #include <microhttpd.h> #include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <sys/socket.h> #include <unistd.h> int access_handler(void *cls, struct MHD_Connection *con, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls) { printf("access_handler(%p, %p, '%s', '%s', '%s', %p, %zu, %p)\n", cls, con, url, method, version, upload_data, *upload_data_size, con_cls); struct MHD_Response *resp = MHD_create_response_from_buffer(0, NULL, MHD_RESPMEM_PERSISTENT); MHD_queue_response(con, 400, resp); MHD_destroy_response(resp); return MHD_YES; } int create_listen_socket(short port) { int on = 1; int fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(port); bind(fd, (struct sockaddr *) &sin, sizeof(sin)); listen(fd, 128); return fd; } int main(int argc, const char *argv[]) { int flags = MHD_USE_NO_LISTEN_SOCKET | MHD_USE_EPOLL_INTERNAL_THREAD | MHD_USE_ITC; struct MHD_Daemon *d = MHD_start_daemon(flags, 8080, NULL, NULL, &access_handler, NULL, MHD_OPTION_END); printf("daemon %p\n", d); int sock = create_listen_socket(8080); while (1) { struct sockaddr addr; socklen_t addrlen; int con = accept(sock, &addr, &addrlen); if (con >= 0) { int ret = MHD_add_connection(d, con, &addr, addrlen); printf("MHD_add_conntection() returned %d\n", ret); } } return 0; }