aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/daemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/daemon.c')
-rw-r--r--src/microhttpd/daemon.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 6925c923..d5d34f17 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -75,6 +75,13 @@
75 */ 75 */
76#define MHD_POOL_SIZE_DEFAULT (32 * 1024) 76#define MHD_POOL_SIZE_DEFAULT (32 * 1024)
77 77
78#ifdef TCP_FASTOPEN
79/**
80 * Default TCP fastopen queue size.
81 */
82#define MHD_TCP_FASTOPEN_QUEUE_SIZE_DEFAULT 10
83#endif
84
78/** 85/**
79 * Print extra messages with reasons for closing 86 * Print extra messages with reasons for closing
80 * sockets? (only adds non-error messages). 87 * sockets? (only adds non-error messages).
@@ -2957,6 +2964,11 @@ parse_options_va (struct MHD_Daemon *daemon,
2957 case MHD_OPTION_THREAD_STACK_SIZE: 2964 case MHD_OPTION_THREAD_STACK_SIZE:
2958 daemon->thread_stack_size = va_arg (ap, size_t); 2965 daemon->thread_stack_size = va_arg (ap, size_t);
2959 break; 2966 break;
2967#ifdef TCP_FASTOPEN
2968 case MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE:
2969 daemon->fastopen_queue_size = va_arg (ap, unsigned int);
2970 break;
2971#endif
2960 case MHD_OPTION_ARRAY: 2972 case MHD_OPTION_ARRAY:
2961 oa = va_arg (ap, struct MHD_OptionItem*); 2973 oa = va_arg (ap, struct MHD_OptionItem*);
2962 i = 0; 2974 i = 0;
@@ -2981,6 +2993,7 @@ parse_options_va (struct MHD_Daemon *daemon,
2981 case MHD_OPTION_CONNECTION_TIMEOUT: 2993 case MHD_OPTION_CONNECTION_TIMEOUT:
2982 case MHD_OPTION_PER_IP_CONNECTION_LIMIT: 2994 case MHD_OPTION_PER_IP_CONNECTION_LIMIT:
2983 case MHD_OPTION_THREAD_POOL_SIZE: 2995 case MHD_OPTION_THREAD_POOL_SIZE:
2996 case MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE:
2984 if (MHD_YES != parse_options (daemon, 2997 if (MHD_YES != parse_options (daemon,
2985 servaddr, 2998 servaddr,
2986 opt, 2999 opt,
@@ -3229,6 +3242,10 @@ MHD_start_daemon_va (unsigned int flags,
3229 if (0 != (flags & MHD_USE_SSL)) 3242 if (0 != (flags & MHD_USE_SSL))
3230 return NULL; 3243 return NULL;
3231#endif 3244#endif
3245#ifndef TCP_FASTOPEN
3246 if (0 != (flags & MHD_USE_TCP_FASTSEND))
3247 return NULL;
3248#endif
3232 if (NULL == dh) 3249 if (NULL == dh)
3233 return NULL; 3250 return NULL;
3234 if (NULL == (daemon = malloc (sizeof (struct MHD_Daemon)))) 3251 if (NULL == (daemon = malloc (sizeof (struct MHD_Daemon))))
@@ -3541,6 +3558,24 @@ MHD_start_daemon_va (unsigned int flags,
3541 MHD_PANIC ("close failed\n"); 3558 MHD_PANIC ("close failed\n");
3542 goto free_and_fail; 3559 goto free_and_fail;
3543 } 3560 }
3561#ifdef TCP_FASTOPEN
3562 if (0 != (flags & MHD_USE_TCP_FASTOPEN))
3563 {
3564 if (0 == daemon->fastopen_queue_size)
3565 daemon->fastopen_queue_size = MHD_TCP_FASTOPEN_QUEUE_SIZE_DEFAULT;
3566 if (0 != setsockopt (socket_fd,
3567 IPPROTO_TCP, TCP_FASTOPEN,
3568 &daemon->fastopen_queue_size,
3569 sizeof (daemon->fastopen_queue_size)))
3570 {
3571#if HAVE_MESSAGES
3572 MHD_DLOG (daemon,
3573 "setsockopt failed: %s\n",
3574 MHD_socket_last_strerr_ ());
3575#endif
3576 }
3577 }
3578#endif
3544#if EPOLL_SUPPORT 3579#if EPOLL_SUPPORT
3545 if (0 != (flags & MHD_USE_EPOLL_LINUX_ONLY)) 3580 if (0 != (flags & MHD_USE_EPOLL_LINUX_ONLY))
3546 { 3581 {