mirror of
https://github.com/cesanta/mongoose.git
synced 2025-01-19 08:03:14 +08:00
Read all available data during recv poll
CL: mg: Read all available data during recv poll PUBLISHED_FROM=b081025b9fb392c988924c7097b5333c38053f6f
This commit is contained in:
parent
91b57aa9a8
commit
93286836f9
26
mongoose.c
26
mongoose.c
@ -2882,18 +2882,20 @@ static int mg_do_recv(struct mg_connection *nc) {
|
||||
((nc->flags & MG_F_LISTENING) && !(nc->flags & MG_F_UDP))) {
|
||||
return -1;
|
||||
}
|
||||
len = recv_avail_size(nc, len);
|
||||
if (len == 0) return -2;
|
||||
if (nc->recv_mbuf.size < nc->recv_mbuf.len + len) {
|
||||
mbuf_resize(&nc->recv_mbuf, nc->recv_mbuf.len + len);
|
||||
}
|
||||
buf = nc->recv_mbuf.buf + nc->recv_mbuf.len;
|
||||
len = nc->recv_mbuf.size - nc->recv_mbuf.len;
|
||||
if (nc->flags & MG_F_UDP) {
|
||||
res = mg_recv_udp(nc, buf, len);
|
||||
} else {
|
||||
res = mg_recv_tcp(nc, buf, len);
|
||||
}
|
||||
do {
|
||||
len = recv_avail_size(nc, len);
|
||||
if (len == 0) return -2;
|
||||
if (nc->recv_mbuf.size < nc->recv_mbuf.len + len) {
|
||||
mbuf_resize(&nc->recv_mbuf, nc->recv_mbuf.len + len);
|
||||
}
|
||||
buf = nc->recv_mbuf.buf + nc->recv_mbuf.len;
|
||||
len = nc->recv_mbuf.size - nc->recv_mbuf.len;
|
||||
if (nc->flags & MG_F_UDP) {
|
||||
res = mg_recv_udp(nc, buf, len);
|
||||
} else {
|
||||
res = mg_recv_tcp(nc, buf, len);
|
||||
}
|
||||
} while (res > 0);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
26
src/mg_net.c
26
src/mg_net.c
@ -565,18 +565,20 @@ static int mg_do_recv(struct mg_connection *nc) {
|
||||
((nc->flags & MG_F_LISTENING) && !(nc->flags & MG_F_UDP))) {
|
||||
return -1;
|
||||
}
|
||||
len = recv_avail_size(nc, len);
|
||||
if (len == 0) return -2;
|
||||
if (nc->recv_mbuf.size < nc->recv_mbuf.len + len) {
|
||||
mbuf_resize(&nc->recv_mbuf, nc->recv_mbuf.len + len);
|
||||
}
|
||||
buf = nc->recv_mbuf.buf + nc->recv_mbuf.len;
|
||||
len = nc->recv_mbuf.size - nc->recv_mbuf.len;
|
||||
if (nc->flags & MG_F_UDP) {
|
||||
res = mg_recv_udp(nc, buf, len);
|
||||
} else {
|
||||
res = mg_recv_tcp(nc, buf, len);
|
||||
}
|
||||
do {
|
||||
len = recv_avail_size(nc, len);
|
||||
if (len == 0) return -2;
|
||||
if (nc->recv_mbuf.size < nc->recv_mbuf.len + len) {
|
||||
mbuf_resize(&nc->recv_mbuf, nc->recv_mbuf.len + len);
|
||||
}
|
||||
buf = nc->recv_mbuf.buf + nc->recv_mbuf.len;
|
||||
len = nc->recv_mbuf.size - nc->recv_mbuf.len;
|
||||
if (nc->flags & MG_F_UDP) {
|
||||
res = mg_recv_udp(nc, buf, len);
|
||||
} else {
|
||||
res = mg_recv_tcp(nc, buf, len);
|
||||
}
|
||||
} while (res > 0);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user