我可以通过调用Socket.IOControl(IOControlCode.DataToRead, null, outValue);
来确定套接字接收缓冲区中有多少数据。
那么有没有相应的方式可以确定套接字发送缓冲区中有多少数据呢?
我需要在带宽和延迟受限的网络上尽可能多地发送UDP数据包,但遇到了发送缓冲区溢出的情况,因此我需要实现一些形式的节流。
我可以通过调用Socket.IOControl(IOControlCode.DataToRead, null, outValue);
来确定套接字接收缓冲区中有多少数据。
那么有没有相应的方式可以确定套接字发送缓冲区中有多少数据呢?
我需要在带宽和延迟受限的网络上尽可能多地发送UDP数据包,但遇到了发送缓冲区溢出的情况,因此我需要实现一些形式的节流。
SO_SNDBUF
套接字选项的含义是你可以发送数据报的大小限制。内核通常会为每个NIC分别设置一个数据包队列,但这适用于所有协议,并且没有用户空间API来查询其大小。IP层以及硬件可能会默默地丢弃数据包。TCP知道如何处理,UDP不知道。因此,除非.Net或其他Microsoft奇迹在用户空间库中具有这样的缓冲,否则你将没有运气。