5.4 周期检查分片(Fragment)发送缓存

间隔一段时间,检查发送缓存,遍历所有Packet,如果 Packet 处于 FRAGMENTING 状态,表示正在进行分片发送。对于这样的 Packet:

如果已发送超时,则更新 Packet 状态为 FAIL。从发送缓存中删除,并通知上层应用程序发送失败。

否则遍历所有 Fragment,如果所有的 Fragment 都已是 ACK 状态,则表示接收端已接收全部的 Fragment,更新 Packet 状态为 SUCC,并记录当前时间为 Packet 发送完成时间。从发送缓存中删除该 Packet,并通知上层应用程序,发送已完成。

如果还有 Fragment 状态为 SENT,表示该 Fragment 还未收到接收端的 ACK,不确定接收端是否接收完成。如果此时已到了重试时间,检查分片重试次数是否已到达上限,如果未到达上限,则进行重试,否则更新 Fragment 状态为 FAIL,更新 Packet 状态为 FAIL,然后从缓存中删除 Packet,并通知上层应用程序发送失败。