diff --git a/mongoose.c b/mongoose.c
index b92b0abbf68d807df70ff8ee2574d18a91dec11e..27d271eae1860c678325c8cdc2bb26d8af9c6569 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -1528,7 +1528,7 @@ static int pull(FILE *fp, struct mg_connection *conn, char *buf, int len) {
 static int pull_all(FILE *fp, struct mg_connection *conn, char *buf, int len) {
   int n, nread = 0;
 
-  while (len > 0) {
+  while (len > 0 && conn->ctx->stop_flag == 0) {
     n = pull(fp, conn, buf + nread, len);
     if (n < 0) {
       nread = n;  // Propagate the error
@@ -3052,7 +3052,8 @@ static int read_request(FILE *fp, struct mg_connection *conn,
   int request_len, n = 0;
 
   request_len = get_request_len(buf, *nread);
-  while (*nread < bufsiz && request_len == 0 &&
+  while (conn->ctx->stop_flag == 0 &&
+         *nread < bufsiz && request_len == 0 &&
          (n = pull(fp, conn, buf + *nread, bufsiz - *nread)) > 0) {
     *nread += n;
     assert(*nread <= bufsiz);