diff options
author | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2008-09-03 18:16:34 +0000 |
---|---|---|
committer | Stefano Sabatini <stefano.sabatini-lala@poste.it> | 2008-09-03 18:16:34 +0000 |
commit | 1c9ff17920563fee8c0383d86f5bed6ed7dcf6d4 (patch) | |
tree | 7aa8e378bae93fd2e0c74641c5a7fe7bc90c5ba5 | |
parent | dc76fe1348be142e5e4a85c5d2b0f6636e191498 (diff) | |
download | ffmpeg-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.conf | 5 | ||||
-rw-r--r-- | ffserver.c | 23 |
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++; |