diff options
Diffstat (limited to 'src/microhttpd/daemon.c')
-rw-r--r-- | src/microhttpd/daemon.c | 35 |
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 | { |