Alan-yly

Results 4 issues of Alan-yly

函数int ikcp_input(ikcpcb* kcp, const char* data, long size)中调用kcp->current来获取当前时间戳,但是这个kcp->current可能和真实的时间戳存在偏差,所以是否应该在ikcp_input接口改成int ikcp_input(ikcpcb* kcp, IUINT32 current ,const char* data, long size)来获取准确的时间戳呢?

在ikcp_parse_fastack函数里发现如果不定义IKCP_FASTACK_CONSERVE宏,会导致已经重传的报文的报文被反复触发快重传,比如:发送端A报文已经重传了,之后发送端收到大于A报文编号的几个报文的ack,那么这些ack又会导致快重传A报文。 ![image](https://github.com/skywind3000/kcp/assets/51262664/2f2a86ac-9804-4c64-9f48-2df8ddf0e290)

您好,这一段我认为有问题,因为ikcp_check返回的时间戳永远小于kcp->ts_flush,而ikcp_update只会当kcp->current大于kcp->ts_flush时才会调用ikcp_flush,所以ikcp_check并不能降低ikcp_flush的调用频率,而所有cpu消耗主要集中在ikcp_flush中,所以使用check机制并不能使kcp的cpu消耗下降。

![企业微信截图_17149756072388](https://github.com/skywind3000/kcp/assets/51262664/300aae40-148c-4332-ac93-b595fe0b9fcc) ikcp_check函数返回的应该是kcp发送缓冲区中下一个需要发送的包的时间戳, 在这个时间点调用ikcp_update 只会更新kcp->current 并不会调用ikcp_flush函数,所以在这个时间点调用ikcp_update函数并不能将需要发送的报文发送出去,所以调用ikcp_update函数没用,应该调用ikcp_flush函数才行吧?或者在ikcp_update函数添加一个force_flush参数才行。