如果用socket限制下载速度,应该如何丢弃数据包?

时间:2012-02-20 11:22:05

标签: tcp download

这个问题听起来可能与现有问题重复,我读过Leaky bucket算法和其他一些算法。

假设我的程序是单线程的,数据如下:

[ downloaded ] [ current buffer (downloading) ] [ un-downloaded ]

如果我在计算出的速度超过阈值时丢弃了一些数据包,我将如何恢复该数据包?数据将以这种方式连续进行。

我该如何丢弃数据包呢?

2 个答案:

答案 0 :(得分:0)

使用TCP套接字连接时,您的程序绝不应“丢弃数据包”。您要做的是阻止程序在超过下载速度限制时读取更多数据。

答案 1 :(得分:0)

TCP旨在重新发送未确认的数据包。这是协议的一部分,是漏桶算法的基础。

因此,我能想到丢弃数据包的唯一方法是,如果您使用的库具有在收到数据包后不发送ACK的功能。如果是这种情况,只需在您要保留的所有数据包上发送一个ACK,然后忽略其余数据包,因为它们将在以后重新发送。

虽然说大多数库都不支持这个功能,因为它的级别很低,并且它们在内部处理TCP部分。

如果您让我们知道特定语言(和套接字实现),您希望在某人的速率限制中知道一种更好的限制连接的方法