aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Sabatini <stefano.sabatini-lala@poste.it>2008-09-03 18:16:34 +0000
committerStefano Sabatini <stefano.sabatini-lala@poste.it>2008-09-03 18:16:34 +0000
commit1c9ff17920563fee8c0383d86f5bed6ed7dcf6d4 (patch)
tree7aa8e378bae93fd2e0c74641c5a7fe7bc90c5ba5
parentdc76fe1348be142e5e4a85c5d2b0f6636e191498 (diff)
downloadffmpeg-1c9ff17920563fee8c0383d86f5bed6ed7dcf6d4.tar.gz
Make the maximum number of simultaneous HTTP connections handled by
ffserver a configuration parameter. The name of the new parameter introduced is MaxHTTPConnections. Originally committed as revision 15182 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--doc/ffserver.conf5
-rw-r--r--ffserver.c23
2 files changed, 23 insertions, 5 deletions
diff --git a/doc/ffserver.conf b/doc/ffserver.conf
index cae1a140c9..2fbfecd683 100644
--- a/doc/ffserver.conf
+++ b/doc/ffserver.conf
@@ -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.
diff --git a/ffserver.c b/ffserver.c
index 08b89a885f..f7d00eabf3 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -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++;