[FFmpeg-cvslog] r15182 - in trunk: doc/ffserver.conf ffserver.c

stefano subversion
Wed Sep 3 20:16:34 CEST 2008


Author: stefano
Date: Wed Sep  3 20:16:34 2008
New Revision: 15182

Log:
Make the maximum number of simultaneous HTTP connections handled by
ffserver a configuration parameter. The name of the new parameter
introduced is MaxHTTPConnections.


Modified:
   trunk/doc/ffserver.conf
   trunk/ffserver.c

Modified: trunk/doc/ffserver.conf
==============================================================================
--- trunk/doc/ffserver.conf	(original)
+++ trunk/doc/ffserver.conf	Wed Sep  3 20:16:34 2008
@@ -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.

Modified: trunk/ffserver.c
==============================================================================
--- trunk/ffserver.c	(original)
+++ trunk/ffserver.c	Wed Sep  3 20:16:34 2008
@@ -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 *fi
                         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++;




More information about the ffmpeg-cvslog mailing list