如何判断Socket的发送缓冲区中有多少数据

时间:2011-08-01 12:14:16

标签: c# .net sockets system.net.sockets

我可以通过调用Socket.IOControl(IOControlCode.DataToRead, null, outValue);

来判断Socket的接收缓冲区中有多少数据

是否有相应的信息来告诉Socket的发送缓冲区中有多少数据?

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

2 个答案:

答案 0 :(得分:3)

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

接收方要求接收方向发送方发出有关丢弃的数据包,请求重新发送,回退到TCP等的信号。这也意味着要从发送方进行某种排序。

希望这有帮助。

答案 1 :(得分:0)

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