|
@@ -700,6 +700,22 @@ static void start_wait_request(HTTPContext *c, int is_rtsp)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void http_send_too_busy_reply(int fd)
|
|
|
+{
|
|
|
+ char buffer[300];
|
|
|
+ int len = snprintf(buffer, sizeof(buffer),
|
|
|
+ "HTTP/1.0 200 Server too busy\r\n"
|
|
|
+ "Content-type: text/html\r\n"
|
|
|
+ "\r\n"
|
|
|
+ "<html><head><title>Too busy</title></head><body>\r\n"
|
|
|
+ "<p>The server is too busy to serve your request at this time.</p>\r\n"
|
|
|
+ "<p>The number of current connections is %d, and this exceeds the limit of %d.</p>\r\n"
|
|
|
+ "</body></html>\r\n",
|
|
|
+ nb_connections, nb_max_connections);
|
|
|
+ send(fd, buffer, len, 0);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
static void new_connection(int server_fd, int is_rtsp)
|
|
|
{
|
|
|
struct sockaddr_in from_addr;
|
|
@@ -715,10 +731,10 @@ static void new_connection(int server_fd, int is_rtsp)
|
|
|
}
|
|
|
ff_socket_nonblock(fd, 1);
|
|
|
|
|
|
- /* XXX: should output a warning page when coming
|
|
|
- close to the connection limit */
|
|
|
- if (nb_connections >= nb_max_connections)
|
|
|
+ if (nb_connections >= nb_max_connections) {
|
|
|
+ http_send_too_busy_reply(fd);
|
|
|
goto fail;
|
|
|
+ }
|
|
|
|
|
|
/* add a new connection */
|
|
|
c = av_mallocz(sizeof(HTTPContext));
|