diff --git a/mongoose.c b/mongoose.c index b2b911bf..8c9ff01a 100644 --- a/mongoose.c +++ b/mongoose.c @@ -4836,7 +4836,7 @@ void mg_multicast_restore(struct mg_connection *c, uint8_t *from) { #define MG_TCPIP_FIN_MS 1000 // Timeout for closing connection #ifndef MG_TCPIP_WIN -#define MG_TCPIP_WIN 6000 // TCP window size +#define MG_TCPIP_WIN 6000 // TCP window size #endif struct connstate { @@ -6648,8 +6648,8 @@ static void mg_tcpip_poll(struct mg_tcpip_if *ifp, uint64_t now) { } } else { // Complex poll / Interrupt-based driver. Queues recvd frames char *buf; - size_t len; - while ((len = mg_queue_next(&ifp->recv_queue, &buf)) > 0) { + size_t len, cnt = 7; // Max 7 packets to fetch + while (cnt-- > 0 && (len = mg_queue_next(&ifp->recv_queue, &buf)) > 0) { mg_tcpip_rx(ifp, buf, len); mg_queue_del(&ifp->recv_queue, len); } diff --git a/src/net_builtin.c b/src/net_builtin.c index 08f8b7b7..7727a87f 100644 --- a/src/net_builtin.c +++ b/src/net_builtin.c @@ -15,7 +15,7 @@ #define MG_TCPIP_FIN_MS 1000 // Timeout for closing connection #ifndef MG_TCPIP_WIN -#define MG_TCPIP_WIN 6000 // TCP window size +#define MG_TCPIP_WIN 6000 // TCP window size #endif struct connstate { @@ -1827,8 +1827,8 @@ static void mg_tcpip_poll(struct mg_tcpip_if *ifp, uint64_t now) { } } else { // Complex poll / Interrupt-based driver. Queues recvd frames char *buf; - size_t len; - while ((len = mg_queue_next(&ifp->recv_queue, &buf)) > 0) { + size_t len, cnt = 7; // Max 7 packets to fetch + while (cnt-- > 0 && (len = mg_queue_next(&ifp->recv_queue, &buf)) > 0) { mg_tcpip_rx(ifp, buf, len); mg_queue_del(&ifp->recv_queue, len); }