diff --git a/kcp.go b/kcp.go index 144978d..5c626c6 100644 --- a/kcp.go +++ b/kcp.go @@ -788,6 +788,20 @@ func (kcp *KCP) flush(ackOnly bool) uint32 { needsend = true segment.rto = kcp.rx_rto segment.resendts = current + segment.rto + } else if segment.fastack >= resent { // fast retransmit + needsend = true + segment.fastack = 0 + segment.rto = kcp.rx_rto + segment.resendts = current + segment.rto + change++ + fastRetransSegs++ + } else if segment.fastack > 0 && newSegsCount == 0 { // early retransmit + needsend = true + segment.fastack = 0 + segment.rto = kcp.rx_rto + segment.resendts = current + segment.rto + change++ + earlyRetransSegs++ } else if _itimediff(current, segment.resendts) >= 0 { // RTO needsend = true if kcp.nodelay == 0 { @@ -798,20 +812,6 @@ func (kcp *KCP) flush(ackOnly bool) uint32 { segment.resendts = current + segment.rto lost++ lostSegs++ - } else if segment.fastack >= resent && _itimediff(current, segment.ts) >= int32(kcp.rx_rto) { // fast retransmit - needsend = true - segment.fastack = 0 - segment.rto = kcp.rx_rto - segment.resendts = current + segment.rto - change++ - fastRetransSegs++ - } else if segment.fastack > 0 && _itimediff(current, segment.ts) >= int32(kcp.rx_rto) && newSegsCount == 0 { // early retransmit - needsend = true - segment.fastack = 0 - segment.rto = kcp.rx_rto - segment.resendts = current + segment.rto - change++ - earlyRetransSegs++ } if needsend {