diff --git a/kcp.go b/kcp.go index 42c52c16..9d9b7bd4 100644 --- a/kcp.go +++ b/kcp.go @@ -485,9 +485,9 @@ func (kcp *KCP) Input(data []byte, regular, ackNoDelay bool) int { } var maxack uint32 + var lastackts uint32 var flag int var inSegs uint64 - current := currentMs() for { var ts, sn, length, una, conv uint32 @@ -527,10 +527,6 @@ func (kcp *KCP) Input(data []byte, regular, ackNoDelay bool) int { kcp.shrink_buf() if cmd == IKCP_CMD_ACK { - if _itimediff(current, ts) >= 0 { - kcp.update_ack(_itimediff(current, ts)) - } - kcp.parse_ack(sn) kcp.shrink_buf() if flag == 0 { @@ -539,6 +535,7 @@ func (kcp *KCP) Input(data []byte, regular, ackNoDelay bool) int { } else if _itimediff(sn, maxack) > 0 { maxack = sn } + lastackts = ts } else if cmd == IKCP_CMD_PUSH { if _itimediff(sn, kcp.rcv_nxt+kcp.rcv_wnd) < 0 { kcp.ack_push(sn, ts) @@ -576,6 +573,10 @@ func (kcp *KCP) Input(data []byte, regular, ackNoDelay bool) int { if flag != 0 && regular { kcp.parse_fastack(maxack) + current := currentMs() + if _itimediff(current, lastackts) >= 0 { + kcp.update_ack(_itimediff(current, lastackts)) + } } if _itimediff(kcp.snd_una, una) > 0 {