【问题标题】:Winsock rate limitingWinsock 速率限制
【发布时间】:2011-12-01 05:44:15
【问题描述】:

在使用 Winsock (TCP) 时,是否有任何工具可以让我限制带宽使用 (rx)?

我研究过 QoS,但一方面它似乎过于复杂,另一方面大部分讨论都围绕着一个甚至在后 Win2k 平台上都不可用的功能 (RSVP)。

(只对原生解决方案感兴趣;没有 .NET 等)

【问题讨论】:

  • 查看我作为骗子所说的问题的链接上的答案。您可以尝试 QOS,但您可能会发现通过控制执行 winsock send() 和 recv() 调用的速率来进行自己的节流会更容易。
  • 是的,这是我的替代计划,但与直接修改 TCP 窗口相比,这似乎有点不雅。无论如何感谢您的意见。
  • 漏桶算法+睡眠?
  • @Damon 类似的东西。睡眠的准确性不够。

标签: c++ windows winapi networking winsock


【解决方案1】:

设置非常小的套接字发送和接收缓冲区大小,例如 1k 或更小,如果平台允许的话。这限制了带宽延迟积,进而限制了接收窗口,进而限制了吞吐量。

【讨论】:

  • 我没有使用套接字级缓冲。
  • @Matt.J 是的。你没办法。内核提供了一个套接字发送缓冲区和一个套接字接收缓冲区。
  • 是的,你的意思是什么?您的解决方案依赖于我刚刚指出已禁用的套接字级缓冲;无法访问 AFD 中的内部缓冲区。
  • @Matt.J 它不是“禁用”的。它是 TCP 的一个组成部分,在 RFC 中定义。如果没有发送和接收缓冲区,TCP 的实现就无法运行。您可以通过 C 级别的 setsockopt() 和各种更高级别的 API 来控制它们。我不明白 AFD 与它有什么关系。
  • 看来你的理解仅限于抽象模型;我会澄清一下:SO_SNDBUF=0 SO_RCVBUF=0 您的解决方案现在如何适应?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 2020-11-04
  • 2021-01-22
  • 1970-01-01
  • 2014-08-05
相关资源
最近更新 更多