]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Make the maximum number of simultaneous HTTP connections handled by
authorstefano <stefano@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Wed, 3 Sep 2008 18:16:34 +0000 (18:16 +0000)
committerstefano <stefano@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Wed, 3 Sep 2008 18:16:34 +0000 (18:16 +0000)
ffserver a configuration parameter. The name of the new parameter
introduced is MaxHTTPConnections.

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@15182 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

doc/ffserver.conf
ffserver.c

index cae1a140c944f0f7bfabf9e0647e6d78ca27db27..2fbfecd683ac875dbc476dd44778cd5041344a33 100644 (file)
@@ -7,6 +7,11 @@ Port 8090
 # several network interfaces.
 BindAddress 0.0.0.0
 
+# Number of simultaneous HTTP connections that can be handled. It has
+# to be defined *before* the MaxClients parameter, since it defines the
+# MaxClients maximum limit.
+MaxHTTPConnections 2000
+
 # Number of simultaneous requests that can be handled. Since FFServer
 # is very fast, it is more likely that you will want to leave this high
 # and use MaxBandwidth, below.
index 08b89a885f178e2853617bb321a6d465b6807a0e..f7d00eabf376abb66ddbfa0356f9823ebc360c06 100644 (file)
@@ -62,9 +62,6 @@ const int program_birth_year = 2000;
 
 static const OptionDef options[];
 
-/* maximum number of simultaneous HTTP connections */
-#define HTTP_MAX_CONNECTIONS 2000
-
 enum HTTPState {
     HTTPSTATE_WAIT_REQUEST,
     HTTPSTATE_SEND_HEADER,
@@ -295,6 +292,8 @@ static int ffserver_daemon;
 static int no_launch;
 static int need_to_start_children;
 
+/* maximum number of simultaneous HTTP connections */
+static unsigned int nb_max_http_connections = 2000;
 static int nb_max_connections = 5;
 static int nb_connections;
 
@@ -543,9 +542,14 @@ static int http_server(void)
 {
     int server_fd = 0, rtsp_server_fd = 0;
     int ret, delay, delay1;
-    struct pollfd poll_table[HTTP_MAX_CONNECTIONS + 2], *poll_entry;
+    struct pollfd *poll_table, *poll_entry;
     HTTPContext *c, *c_next;
 
+    if(!(poll_table = av_mallocz(nb_max_http_connections + 2))) {
+        http_log("Impossible to allocate a poll table handling %d connections.\n", nb_max_http_connections);
+        return -1;
+    }
+
     if (my_http_addr.sin_port) {
         server_fd = socket_open_listen(&my_http_addr);
         if (server_fd < 0)
@@ -3816,10 +3820,19 @@ static int parse_ffconfig(const char *filename)
                         filename, line_num, arg);
                 errors++;
             }
+        } else if (!strcasecmp(cmd, "MaxHTTPConnections")) {
+            get_arg(arg, sizeof(arg), &p);
+            val = atoi(arg);
+            if (val < 1 || val > 65536) {
+                fprintf(stderr, "%s:%d: Invalid MaxHTTPConnections: %s\n",
+                        filename, line_num, arg);
+                errors++;
+            }
+            nb_max_http_connections = val;
         } else if (!strcasecmp(cmd, "MaxClients")) {
             get_arg(arg, sizeof(arg), &p);
             val = atoi(arg);
-            if (val < 1 || val > HTTP_MAX_CONNECTIONS) {
+            if (val < 1 || val > nb_max_http_connections) {
                 fprintf(stderr, "%s:%d: Invalid MaxClients: %s\n",
                         filename, line_num, arg);
                 errors++;