|
@@ -1251,7 +1251,7 @@ static void gmt_time_string(char *buf, size_t buf_len, time_t *t)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-/* difftime for timespec */
|
|
|
|
|
|
+/* difftime for struct timespec. Return value is in seconds. */
|
|
static double mg_difftimespec(const struct timespec *ts_now, const struct timespec *ts_before)
|
|
static double mg_difftimespec(const struct timespec *ts_now, const struct timespec *ts_before)
|
|
{
|
|
{
|
|
return (double)(ts_now->tv_nsec - ts_before->tv_nsec)*1.0E-9 + (double)(ts_now->tv_sec - ts_before->tv_sec);
|
|
return (double)(ts_now->tv_nsec - ts_before->tv_nsec)*1.0E-9 + (double)(ts_now->tv_sec - ts_before->tv_sec);
|
|
@@ -2533,7 +2533,8 @@ static int pull(FILE *fp, struct mg_connection *conn, char *buf, int len)
|
|
}
|
|
}
|
|
} while ((timeout<=0) || (mg_difftimespec(&now,&start)<=timeout));
|
|
} while ((timeout<=0) || (mg_difftimespec(&now,&start)<=timeout));
|
|
|
|
|
|
- return conn->ctx->stop_flag ? -1 : nread;
|
|
|
|
|
|
+ /* Timeout occured. Return the amount of data received up to now. */
|
|
|
|
+ return nread;
|
|
}
|
|
}
|
|
|
|
|
|
static int pull_all(FILE *fp, struct mg_connection *conn, char *buf, int len)
|
|
static int pull_all(FILE *fp, struct mg_connection *conn, char *buf, int len)
|
|
@@ -7207,6 +7208,9 @@ static int getreq(struct mg_connection *conn, char *ebuf, size_t ebuf_len, int *
|
|
|
|
|
|
reset_per_request_attributes(conn);
|
|
reset_per_request_attributes(conn);
|
|
|
|
|
|
|
|
+ /* Set the time the request was received. This value should be used for timeouts. */
|
|
|
|
+ clock_gettime(CLOCK_MONOTONIC, &(conn->req_time));
|
|
|
|
+
|
|
conn->request_len = read_request(NULL, conn, conn->buf, conn->buf_size,
|
|
conn->request_len = read_request(NULL, conn, conn->buf, conn->buf_size,
|
|
&conn->data_len);
|
|
&conn->data_len);
|
|
assert(conn->request_len < 0 || conn->data_len >= conn->request_len);
|
|
assert(conn->request_len < 0 || conn->data_len >= conn->request_len);
|
|
@@ -7248,9 +7252,6 @@ static int getreq(struct mg_connection *conn, char *ebuf, size_t ebuf_len, int *
|
|
/* Other request */
|
|
/* Other request */
|
|
conn->content_len = 0;
|
|
conn->content_len = 0;
|
|
}
|
|
}
|
|
-
|
|
|
|
- /* Set the time the request was received. This value should be used for timeouts. */
|
|
|
|
- clock_gettime(CLOCK_MONOTONIC, &(conn->req_time));
|
|
|
|
}
|
|
}
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|