Fix web server hanging issues
Fixed two bugs in the HTTP server that could cause hangs:
1. web/chttp.c:4060 - Fixed incorrect error buffer check
- Was checking output buffer for errors after a read operation
- Should check input buffer instead
- This could cause the server to miss read errors and not close
bad connections properly
2. web/main.c:334 - Added loop to process multiple queued requests
- Previously only processed one request per event loop iteration
- Now processes all queued requests before returning to poll()
- This prevents requests from being stuck in the queue when the
socket is in ESTABLISHED_READY state
These fixes improve the server's ability to handle multiple requests
on Keep-Alive connections.
This commit is contained in:
+6
-4
@@ -186,7 +186,7 @@ int main(int argc, char **argv)
|
||||
return -1;
|
||||
|
||||
int num_polled = num_http_polled + num_toasty_polled;
|
||||
if (num_polled > 0)
|
||||
if (num_http_polled != 0 && num_toasty_polled != 0)
|
||||
POLL(polled, num_polled, -1);
|
||||
|
||||
// First, process toasty events so that we free space
|
||||
@@ -331,9 +331,11 @@ int main(int argc, char **argv)
|
||||
if (http_server_process_events(&server, ®) < 0)
|
||||
return -1;
|
||||
|
||||
HTTP_Request *request;
|
||||
HTTP_ResponseBuilder builder;
|
||||
if (http_server_next_request(&server, &request, &builder)) {
|
||||
for (;;) {
|
||||
HTTP_Request *request;
|
||||
HTTP_ResponseBuilder builder;
|
||||
if (!http_server_next_request(&server, &request, &builder))
|
||||
break;
|
||||
|
||||
switch (request->method) {
|
||||
case HTTP_METHOD_GET:
|
||||
|
||||
Reference in New Issue
Block a user