mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-08 16:11:18 +00:00
Add Keep-Alive ACK
This commit is contained in:
1 parent
b0d0fbfd9f
commit
acf217601b
2 files changed
+10
No files matched your search
@@ -4869,6 +4869,11 @@ static void read_conn(struct mg_connection *c, struct pkt *pkt) {
|
|||||||
if (pkt->pay.len == 0) return; // if no data, we're done
|
if (pkt->pay.len == 0) return; // if no data, we're done
|
||||||
} else if (pkt->pay.len == 0) { // this is an ACK
|
} else if (pkt->pay.len == 0) { // this is an ACK
|
||||||
if (s->fin_rcvd && s->ttype == MIP_TTYPE_FIN) s->twclosure = true;
|
if (s->fin_rcvd && s->ttype == MIP_TTYPE_FIN) s->twclosure = true;
|
||||||
|
if (mg_ntohl(pkt->tcp->seq) == s->ack - 1) { // this is a keepalive probe
|
||||||
|
MG_VERBOSE(("%lu keepalive ACK", c->id));
|
||||||
|
tx_tcp(c->mgr->ifp, s->mac, rem_ip, TH_ACK, c->loc.port, c->rem.port,
|
||||||
|
mg_htonl(s->seq), mg_htonl(s->ack), NULL, 0);
|
||||||
|
}
|
||||||
return; // no data to process
|
return; // no data to process
|
||||||
} else if (seq != s->ack) {
|
} else if (seq != s->ack) {
|
||||||
uint32_t ack = (uint32_t) (mg_htonl(pkt->tcp->seq) + pkt->pay.len);
|
uint32_t ack = (uint32_t) (mg_htonl(pkt->tcp->seq) + pkt->pay.len);
|
||||||
|
|||||||
@@ -703,6 +703,11 @@ static void read_conn(struct mg_connection *c, struct pkt *pkt) {
|
|||||||
if (pkt->pay.len == 0) return; // if no data, we're done
|
if (pkt->pay.len == 0) return; // if no data, we're done
|
||||||
} else if (pkt->pay.len == 0) { // this is an ACK
|
} else if (pkt->pay.len == 0) { // this is an ACK
|
||||||
if (s->fin_rcvd && s->ttype == MIP_TTYPE_FIN) s->twclosure = true;
|
if (s->fin_rcvd && s->ttype == MIP_TTYPE_FIN) s->twclosure = true;
|
||||||
|
if (mg_ntohl(pkt->tcp->seq) == s->ack - 1) { // this is a keepalive probe
|
||||||
|
MG_VERBOSE(("%lu keepalive ACK", c->id));
|
||||||
|
tx_tcp(c->mgr->ifp, s->mac, rem_ip, TH_ACK, c->loc.port, c->rem.port,
|
||||||
|
mg_htonl(s->seq), mg_htonl(s->ack), NULL, 0);
|
||||||
|
}
|
||||||
return; // no data to process
|
return; // no data to process
|
||||||
} else if (seq != s->ack) {
|
} else if (seq != s->ack) {
|
||||||
uint32_t ack = (uint32_t) (mg_htonl(pkt->tcp->seq) + pkt->pay.len);
|
uint32_t ack = (uint32_t) (mg_htonl(pkt->tcp->seq) + pkt->pay.len);
|
||||||
|
|||||||
Reference in new issue
Block a user