限制套接字的最大速度

时间:2010-04-17 00:39:00

标签: c++ sockets winapi

我在Windows上使用原始套接字,我正试图找到一种方法来限制一组套接字的最大连接速度。

例如,我有3个套接字到3个服务器,并希望将总下载速度限制为1mb。

我用Google搜索,无法找到任何相关内容。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

如果要将下载速度限制为每秒1 MB,请以一种方式管理recv()调用,使得一秒钟内不会recv()超过1 MB。读取最大1 MB后,调整线程(使用ThreadSleep)直到下一秒。这只是一个简单的方法。

答案 1 :(得分:1)

我认为实现这一目标的唯一方法是艰难的方法...通过测量在最后一个(这么多)秒内在每个套接字上发送/接收的数据量,并且阻止发送/接收更多数据,直到有足够的时间将总平均带宽限制为您想要的值。我已经使用非阻塞套接字和select()实现了这个逻辑,并且它是可行的(尽管不容易)。

答案 2 :(得分:1)

这就像是在问“我想从我的硬盘驱动器中快速读取一半”。或者“我只想使用50%的CPU周期”。没有意义,它尽可能快。如果有更多的程序竞争资源,则由操作系统来确保每个人都获得公平的份额。如果您不想要公平共享,那么只需降低执行读取的线程的线程优先级。或者拨打Sleep()。