skywind3000 / kcp

:zap: KCP - A Fast and Reliable ARQ Protocol

Repository from Github https://github.comskywind3000/kcpRepository from Github https://github.comskywind3000/kcp

更新maxack时判断ts使用的是大于,导致一些情况fastack未正确更新

xhz636 opened this issue · comments

ikcp_input函数中,处理IKCP_CMD_ACK这段逻辑,在更新maxack时,由于比较tslatest_ts使用的是>,会导致maxack未更新到最新的sn
举例:在一次ikcp_flush中,发送了4个包,则这4个包的ts都是一致的,假设这4个包的sn分别是1,2,3,4,此时如果对端只收到了sn为2,4的包,并返回了ack,本地在处理ack时,第1个ack会将maxack设置为2,latest_ts设置为ts,而第2个ack由于ts一致,导致无法将maxack更新到4,因此在ikcp_parse_fastack中更新faskack时,sn为3的包不会触发fastack++
因此,对比latest_ts的逻辑应该需要使用>=比较合理?

Image