1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
Description: Makes SOMAXCONN user-configurable.
Author: Jesse Williamson <jesse.williamson@canonical.com>
Origin: upstream, https://github.com/civetweb/civetweb/pull/776/commits/febab7dc38c9671577603425c54c20f841e27f97
Bug: https://github.com/civetweb/civetweb/issues/775
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/ceph/+bug/1838109
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- a/src/civetweb/src/civetweb.c
+++ b/src/civetweb/src/civetweb.c
@@ -1541,10 +1541,6 @@ typedef int socklen_t;
#define MSG_NOSIGNAL (0)
#endif
-#if !defined(SOMAXCONN)
-#define SOMAXCONN (100)
-#endif
-
/* Size of the accepted socket queue */
#if !defined(MGSQLEN)
#define MGSQLEN (20)
@@ -2063,6 +2059,7 @@ enum {
SSL_CERTIFICATE,
SSL_CERTIFICATE_CHAIN,
NUM_THREADS,
+ SO_MAX_CONNECTIONS,
RUN_AS_USER,
URL_REWRITE_PATTERN,
HIDE_FILES,
@@ -2165,6 +2162,7 @@ static struct mg_option config_options[]
{"ssl_certificate", CONFIG_TYPE_FILE, NULL},
{"ssl_certificate_chain", CONFIG_TYPE_FILE, NULL},
{"num_threads", CONFIG_TYPE_NUMBER, "50"},
+ {"max_connections", CONFIG_TYPE_NUMBER, "100"},
{"run_as_user", CONFIG_TYPE_STRING, NULL},
{"url_rewrite_patterns", CONFIG_TYPE_STRING_LIST, NULL},
{"hide_files_patterns", CONFIG_TYPE_EXT_PATTERN, NULL},
@@ -13340,7 +13338,15 @@ set_ports_option(struct mg_context *ctx)
continue;
}
- if (listen(so.sock, SOMAXCONN) != 0) {
+ char *p = ctx->config[SO_MAX_CONNECTIONS];
+ long opt_max_connections = strtol(p, NULL, 10);
+ if(opt_max_connections > INT_MAX || opt_max_connections < 1) {
+ mg_cry(fc(ctx),
+ "max_connections value \"%s\" is invalid", p);
+ continue;
+ }
+
+ if (listen(so.sock, (int)opt_max_connections) != 0) {
mg_cry(fc(ctx),
"cannot listen to %.*s: %d (%s)",
|