4

我可以通过调用来判断 Socket 的接收缓冲区中有多少数据Socket.IOControl(IOControlCode.DataToRead, null, outValue);

是否有等价物可以告诉 Socket 的发送缓冲区中有多少数据?

我需要通过带宽和延迟受限的网络发送尽可能多的 UDP 数据包,并且我遇到了发送缓冲区溢出的情况,因此我需要实施某种形式的限制。

4

2 回答 2

3

UDP 套接字没有发送缓冲区。UDP的套接字选项的含义SO_SNDBUF是对您可以发送的数据报大小的限制。内核通常每个 NIC 都有一个数据包队列,但它结合了所有协议,并且没有用户级 API 来查询它的大小。IP 层,然后是硬件,可以静默丢弃数据包。TCP 知道如何处理,而 UDP 不知道。因此,除非 .Net 或任何其他微软奇迹在用户级库中有这样的缓冲,否则你就不走运了。

追索权是让接收者向发送者发送有关丢弃数据包、请求重新发送、回退到 TCP 等的信号。这也意味着来自发送者的某种排序。

希望这可以帮助。

于 2011-08-02T16:01:53.743 回答
0

你能分析一下标题吗?可能有关于内容长度的信息。

于 2011-08-02T15:26:48.307 回答