summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--networking/httpd.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/networking/httpd.c b/networking/httpd.c
index 66ce1e1f7..01b56ebd2 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1059,6 +1059,7 @@ static int get_line(void)
int count = 0;
char c;
+ alarm(HEADER_READ_TIMEOUT);
while (1) {
if (hdr_cnt <= 0) {
hdr_cnt = safe_read(STDIN_FILENO, hdr_buf, sizeof(hdr_buf));
@@ -1073,7 +1074,7 @@ static int get_line(void)
continue;
if (c == '\n') {
iobuf[count] = '\0';
- return count;
+ break;
}
if (count < (IOBUF_SIZE - 1)) /* check overflow */
count++;
@@ -1739,8 +1740,8 @@ static Htaccess_Proxy *find_proxy_entry(const char *url)
/*
* Handle timeouts
*/
-static void exit_on_signal(int sig) NORETURN;
-static void exit_on_signal(int sig UNUSED_PARAM)
+static void send_REQUEST_TIMEOUT_and_exit(int sig) NORETURN;
+static void send_REQUEST_TIMEOUT_and_exit(int sig UNUSED_PARAM)
{
send_headers_and_exit(HTTP_REQUEST_TIMEOUT);
}
@@ -1805,9 +1806,8 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
bb_error_msg("connected");
}
- /* Install timeout handler */
- signal_no_SA_RESTART_empty_mask(SIGALRM, exit_on_signal);
- alarm(HEADER_READ_TIMEOUT);
+ /* Install timeout handler. get_line() needs it. */
+ signal(SIGALRM, send_REQUEST_TIMEOUT_and_exit);
if (!get_line()) /* EOF or error or empty line */
send_headers_and_exit(HTTP_BAD_REQUEST);
@@ -1934,7 +1934,6 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
/* Read until blank line for HTTP version specified, else parse immediate */
while (1) {
- alarm(HEADER_READ_TIMEOUT);
if (!get_line())
break; /* EOF or error or empty line */
if (DEBUG)