mirror of
https://github.com/skywind3000/kcp.git
synced 2026-08-19 06:03:28 +08:00
new: IKCP_FASTACK_CONSERVE
This commit is contained in:
20
ikcp.c
20
ikcp.c
@@ -604,7 +604,7 @@ static void ikcp_parse_una(ikcpcb *kcp, IUINT32 una)
|
||||
}
|
||||
}
|
||||
|
||||
static void ikcp_parse_fastack(ikcpcb *kcp, IUINT32 sn)
|
||||
static void ikcp_parse_fastack(ikcpcb *kcp, IUINT32 sn, IUINT32 ts)
|
||||
{
|
||||
struct IQUEUEHEAD *p, *next;
|
||||
|
||||
@@ -618,7 +618,12 @@ static void ikcp_parse_fastack(ikcpcb *kcp, IUINT32 sn)
|
||||
break;
|
||||
}
|
||||
else if (sn != seg->sn) {
|
||||
#ifndef IKCP_FASTACK_CONSERVE
|
||||
seg->fastack++;
|
||||
#else
|
||||
if (_itimediff(ts, seg->ts) >= 0)
|
||||
seg->fastack++;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -742,7 +747,7 @@ void ikcp_parse_data(ikcpcb *kcp, IKCPSEG *newseg)
|
||||
int ikcp_input(ikcpcb *kcp, const char *data, long size)
|
||||
{
|
||||
IUINT32 prev_una = kcp->snd_una;
|
||||
IUINT32 maxack = 0;
|
||||
IUINT32 maxack = 0, latest_ts = 0;
|
||||
int flag = 0;
|
||||
|
||||
if (ikcp_canlog(kcp, IKCP_LOG_INPUT)) {
|
||||
@@ -791,9 +796,18 @@ int ikcp_input(ikcpcb *kcp, const char *data, long size)
|
||||
if (flag == 0) {
|
||||
flag = 1;
|
||||
maxack = sn;
|
||||
latest_ts = ts;
|
||||
} else {
|
||||
if (_itimediff(sn, maxack) > 0) {
|
||||
#ifndef IKCP_FASTACK_CONSERVE
|
||||
maxack = sn;
|
||||
latest_ts = ts;
|
||||
#else
|
||||
if (_itimediff(ts, latest_ts) > 0) {
|
||||
maxack = sn;
|
||||
latest_ts = ts;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (ikcp_canlog(kcp, IKCP_LOG_IN_ACK)) {
|
||||
@@ -853,7 +867,7 @@ int ikcp_input(ikcpcb *kcp, const char *data, long size)
|
||||
}
|
||||
|
||||
if (flag != 0) {
|
||||
ikcp_parse_fastack(kcp, maxack);
|
||||
ikcp_parse_fastack(kcp, maxack, latest_ts);
|
||||
}
|
||||
|
||||
if (_itimediff(kcp->snd_una, prev_una) > 0) {
|
||||
|
||||
Reference in New Issue
Block a user