adjust flush condition sequence,fastack first to prevent needless fire

This commit is contained in:
xtaci
2019-09-23 21:57:41 +08:00
parent b82e376791
commit d0f56d82a1
+14 -14
View File
@@ -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 {