- 因为服务端重启,重启后收到数据通过`ikcp_parse_data`中`if (seg->sn == kcp->rcv_nxt && kcp->nrcv_que < kcp->rcv_wnd)`判断入队列,此时`conv`一致,可惜的是`seg->sn`是之前递增的值,`kcp->rcv_nxt`将始终为0. 导致数据未入`rcv_queue`相当于未真正“接收”,因为`ikcp_recv`中的 `if (iqueue_is_empty(&kcp->rcv_queue)) return -1;` - 那么此时同步`sn`只能在客户端新建kcp对象吗?这个意思是否只能是业务层通过类似心跳的机制判断此时的服务器数据未真正接收(网卡收到了但是业务层未收到),然后重连?
因为服务端重启,重启后收到数据通过
ikcp_parse_data中if (seg->sn == kcp->rcv_nxt && kcp->nrcv_que < kcp->rcv_wnd)判断入队列,此时conv一致,可惜的是seg->sn是之前递增的值,kcp->rcv_nxt将始终为0. 导致数据未入rcv_queue相当于未真正“接收”,因为ikcp_recv中的if (iqueue_is_empty(&kcp->rcv_queue)) return -1;那么此时同步
sn只能在客户端新建kcp对象吗?这个意思是否只能是业务层通过类似心跳的机制判断此时的服务器数据未真正接收(网卡收到了但是业务层未收到),然后重连?