summaryrefslogtreecommitdiffstats
path: root/debian/patches/civetweb-755-1.8-somaxconn-configurable.patch
blob: 8313b3ecea591bb305776e0d04c732d149bc7571 (plain)
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)",