From e70d98b7b0f4d2be47e8c16bed4cbf8896abfc96 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka <valenok@gmail.com> Date: Tue, 4 Feb 2014 09:59:53 +0000 Subject: [PATCH] Added fixes for eCos --- mongoose.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mongoose.c b/mongoose.c index 1b411a1a0..c0ecc218e 100644 --- a/mongoose.c +++ b/mongoose.c @@ -176,6 +176,10 @@ struct ll { struct ll *prev, *next; }; #define MONGOOSE_USE_IDLE_TIMEOUT_SECONDS 30 #endif +#ifdef MONGOOSE_NO_SOCKETPAIR +#define MONGOOSE_NO_CGI +#endif + #ifdef MONGOOSE_ENABLE_DEBUG #define DBG(x) do { printf("%-20s ", __func__); printf x; putchar('\n'); \ fflush(stdout); } while(0) @@ -3843,7 +3847,10 @@ unsigned int mg_poll_server(struct mg_server *server, int milliseconds) { // Accept new connections if (FD_ISSET(server->listening_sock, &read_set)) { - while ((conn = accept_new_connection(server)) != NULL) { + // We're not looping here, and accepting just one connection at + // a time. The reason is that eCos does not respect non-blocking + // flag on a listening socket and hangs in a loop. + if ((conn = accept_new_connection(server)) != NULL) { conn->birth_time = conn->last_activity_time = current_time; } } @@ -4198,11 +4205,13 @@ struct mg_server *mg_create_server(void *server_data) { LINKED_LIST_INIT(&server->active_connections); +#ifndef MONGOOSE_NO_SOCKETPAIR // Create control socket pair. Do it in a loop to protect from // interrupted syscalls in mg_socketpair(). do { mg_socketpair(server->ctl); } while (server->ctl[0] == INVALID_SOCKET); +#endif #ifdef MONGOOSE_USE_SSL SSL_library_init(); -- GitLab