Skip to content

Commit a5d82ca

Browse files
author
skywind3000
committed
new: IKCP_FASTACK_LIMIT
1 parent 3a9196b commit a5d82ca

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

ikcp.c

+10-5
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ const IUINT32 IKCP_THRESH_INIT = 2;
4343
const IUINT32 IKCP_THRESH_MIN = 2;
4444
const IUINT32 IKCP_PROBE_INIT = 7000; // 7 secs to probe window size
4545
const IUINT32 IKCP_PROBE_LIMIT = 120000; // up to 120 secs to probe window
46+
const IUINT32 IKCP_FASTACK_LIMIT = 5; // max times to trigger fastack
4647

4748

4849
//---------------------------------------------------------------------
@@ -283,6 +284,7 @@ ikcpcb* ikcp_create(IUINT32 conv, void *user)
283284
kcp->logmask = 0;
284285
kcp->ssthresh = IKCP_THRESH_INIT;
285286
kcp->fastresend = 0;
287+
kcp->fastlimit = IKCP_FASTACK_LIMIT;
286288
kcp->nocwnd = 0;
287289
kcp->xmit = 0;
288290
kcp->dead_link = IKCP_DEADLINK;
@@ -1062,11 +1064,14 @@ void ikcp_flush(ikcpcb *kcp)
10621064
lost = 1;
10631065
}
10641066
else if (segment->fastack >= resent) {
1065-
needsend = 1;
1066-
segment->xmit++;
1067-
segment->fastack = 0;
1068-
segment->resendts = current + segment->rto;
1069-
change++;
1067+
if ((int)segment->xmit <= kcp->fastlimit ||
1068+
kcp->fastlimit <= 0) {
1069+
needsend = 1;
1070+
segment->xmit++;
1071+
segment->fastack = 0;
1072+
segment->resendts = current + segment->rto;
1073+
change++;
1074+
}
10701075
}
10711076

10721077
if (needsend) {

ikcp.h

+1
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ struct IKCPCB
309309
void *user;
310310
char *buffer;
311311
int fastresend;
312+
int fastlimit;
312313
int nocwnd, stream;
313314
int logmask;
314315
int (*output)(const char *buf, int len, struct IKCPCB *kcp, void *user);

0 commit comments

Comments
 (0)