51#ifndef MHD_WINSOCK_SOCKETS
63 _ (
"setsockopt failed: %s\n"),
75#if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT)
89 _ (
"setsockopt failed: %s\n"),
102 "Cannot allow listening address reuse: SO_REUSEPORT not defined.\n"));
115#if (defined(MHD_WINSOCK_SOCKETS) && defined(SO_EXCLUSIVEADDRUSE)) || \
116 (defined(__sun) && defined(SO_EXCLBIND))
130 _ (
"setsockopt failed: %s\n"),
136#elif defined(MHD_WINSOCK_SOCKETS)
141 "Cannot disallow listening address reuse: SO_EXCLUSIVEADDRUSE not defined.\n"));
224 _ (
"IPv6 not supported by this build.\n"));
246 _ (
"Failed to create socket for listening: %s\n"),
259#if defined IPPROTO_IPV6 && defined IPV6_V6ONLY
275 _ (
"setsockopt failed: %s\n"),
284 "Cannot explicitly setup dual stack behavior on this platform.\n"));
302#ifdef IN6ADDR_ANY_INIT
313#ifdef IN6ADDR_ANY_INIT
316#if HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
333#if HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
346 unsigned int port = 0;
348 switch (
sa->sa_family)
368 _ (
"Failed to bind to port %u: %s\n"),
388 _ (
"setsockopt failed: %s\n"),
404 _ (
"Failed to listen for connections: %s\n"),
442 _ (
"Failed to get listen port number: %s\n"),
447#ifdef MHD_POSIX_SOCKETS
455 "Failed to get listen port number (`struct sockaddr_storage` too small!?).\n"));
487 _ (
"Unknown address family!\n"));
511#ifdef USE_EPOLL_CREATE1
521 _ (
"Call to epoll_create1 failed: %s\n"),
526#if ! defined(USE_EPOLL_CREATE1)
532 _ (
"Failed to set noninheritable mode on epoll FD.\n"));
557 if (-1 == daemon->epoll_fd)
559#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
571 event.data.ptr = daemon;
580 _ (
"Call to epoll_ctl failed: %s\n"),
585 daemon->listen_socket_in_epoll =
true;
589 event.data.ptr = (
void *) daemon->epoll_itc_marker;
598 _ (
"Call to epoll_ctl failed: %s\n"),
629 MHD_PANIC (
"MHD_ELS_AUTO should have been mapped to preferred style.\n");
640 MHD_PANIC (
"MHD_ELS_POLL not supported, should have failed earlier.\n");
648 MHD_PANIC (
"MHD_ELS_EPOLL not supported, should have failed earlier.\n");
704 d->worker_pool =
NULL;
710 ++
d->global_connection_limit;
720 "Failed to create worker inter-thread communication channel: %s\n"),
734 "File descriptor for inter-thread communication channel exceeds maximum value.\n"));
758 _ (
"MHD failed to initialize cleanup connection mutex.\n"));
776 _ (
"Failed to create pool thread: %s\n"),
837#elif defined(HAVE_POLL)
854 "Combining MHD_USE_THREAD_PER_CONNECTION and MHD_USE_EPOLL is not supported.\n"));
869 _ (
"Failed to create inter-thread communication channel: %s\n"),
882 "File descriptor for inter-thread communication channel exceeds maximum value.\n"));
900 _ (
"Socket descriptor larger than FD_SETSIZE: %d > %d\n"),
914 _ (
"Failed to set nonblocking mode on listening socket: %s\n"),
955 _ (
"Failed to create listen thread: %s\n"),
void MHD_connection_cleanup_(struct MHD_Daemon *daemon)
functions to cleanup completed connection
void MHD_daemon_close_all_connections_(struct MHD_Daemon *daemon)
function to close all connections open at a daemon
non-public functions provided by daemon_epoll.c
enum MHD_StatusCode MHD_daemon_poll_(struct MHD_Daemon *daemon, bool may_block)
non-public functions provided by daemon_poll.c
enum MHD_StatusCode MHD_daemon_select_(struct MHD_Daemon *daemon, int may_block)
non-public functions provided by daemon_select.c
static MHD_THRD_RTRN_TYPE_ MHD_THRD_CALL_SPEC_ MHD_polling_thread(void *cls)
static enum MHD_StatusCode configure_listen_reuse(struct MHD_Daemon *daemon)
static enum MHD_StatusCode setup_thread_pool(struct MHD_Daemon *daemon)
static void get_listen_port_number(struct MHD_Daemon *daemon)
static enum MHD_StatusCode open_listen_socket(struct MHD_Daemon *daemon)
enum MHD_StatusCode MHD_daemon_start(struct MHD_Daemon *daemon)
MHD_socket MHD_daemon_quiesce(struct MHD_Daemon *daemon)
internal shared structures
void * MHD_calloc_(size_t nelem, size_t elsize)
#define MHD_strerror_(errnum)
#define MHD_itc_destroy_chk_(itc)
#define MHD_mutex_destroy_chk_(pmutex)
int MHD_socket_noninheritable_(MHD_socket sock)
int MHD_socket_nonblocking_(MHD_socket sock)
MHD_socket MHD_socket_create_listen_(int pf)
#define MHD_socket_last_strerr_()
#define MHD_SCKT_FD_FITS_FDSET_(fd, pset)
#define MHD_create_named_thread_(t, n, s, r, a)
#define MHD_mutex_init_(ignore)
#define MHD_INVALID_SOCKET
bool MHD_resume_suspended_connections_(struct MHD_Daemon *daemon)
implementation of MHD_request_resume()
enum MHD_AddressFamily listen_af
unsigned int worker_pool_size
enum MHD_FastOpenMethod fast_open_method
enum MHD_EventLoopSyscall event_loop_syscall
bool disallow_suspend_resume
struct sockaddr_storage listen_sa
struct MHD_Daemon * worker_pool
MHD_thread_handle_ID_ pid
enum MHD_ThreadingMode threading_mode
unsigned int global_connection_limit
size_t thread_stack_limit_b
unsigned int fo_queue_length