Stop reading if connection is closing

CL: none

PUBLISHED_FROM=3b74ca02e2960bbbf130f6d95aef679f2917e824
This commit is contained in:
Deomid Ryabkov 2018-11-02 17:31:58 +00:00 committed by Cesanta Bot
parent 93286836f9
commit 3130e59244
3 changed files with 9 additions and 5 deletions

View File

@ -2895,7 +2895,7 @@ static int mg_do_recv(struct mg_connection *nc) {
} else { } else {
res = mg_recv_tcp(nc, buf, len); res = mg_recv_tcp(nc, buf, len);
} }
} while (res > 0); } while (res > 0 && !(nc->flags & (MG_F_CLOSE_IMMEDIATELY | MG_F_UDP)));
return res; return res;
} }
@ -3012,7 +3012,9 @@ static int mg_recv_udp(struct mg_connection *nc, char *buf, size_t len) {
mg_hexdump_connection(nc, nc->mgr->hexdump_file, buf, n, MG_EV_RECV); mg_hexdump_connection(nc, nc->mgr->hexdump_file, buf, n, MG_EV_RECV);
} }
#endif #endif
mg_call(nc, NULL, nc->user_data, MG_EV_RECV, &n); if (n != 0) {
mg_call(nc, NULL, nc->user_data, MG_EV_RECV, &n);
}
} }
out: out:

View File

@ -578,7 +578,7 @@ static int mg_do_recv(struct mg_connection *nc) {
} else { } else {
res = mg_recv_tcp(nc, buf, len); res = mg_recv_tcp(nc, buf, len);
} }
} while (res > 0); } while (res > 0 && !(nc->flags & (MG_F_CLOSE_IMMEDIATELY | MG_F_UDP)));
return res; return res;
} }
@ -695,7 +695,9 @@ static int mg_recv_udp(struct mg_connection *nc, char *buf, size_t len) {
mg_hexdump_connection(nc, nc->mgr->hexdump_file, buf, n, MG_EV_RECV); mg_hexdump_connection(nc, nc->mgr->hexdump_file, buf, n, MG_EV_RECV);
} }
#endif #endif
mg_call(nc, NULL, nc->user_data, MG_EV_RECV, &n); if (n != 0) {
mg_call(nc, NULL, nc->user_data, MG_EV_RECV, &n);
}
} }
out: out:

View File

@ -5665,7 +5665,7 @@ static const char *test_socks(void) {
mbuf_resize(&c->recv_mbuf, 10000000); mbuf_resize(&c->recv_mbuf, 10000000);
/* Run event loop. Use more cycles to let file download complete. */ /* Run event loop. Use more cycles to let file download complete. */
poll_until(&mgr, 10, c_str_ne, status, (void *) ""); poll_until(&mgr, 15, c_str_ne, status, (void *) "");
ASSERT_STREQ(status, "success"); ASSERT_STREQ(status, "success");
mg_mgr_free(&mgr); mg_mgr_free(&mgr);