5

调用getsockoptwithSO_RCVBUF将返回套接字接收缓冲区的分配大小。

我很想知道在调用之前是否可以查询缓冲区中实际有多少数据报包(或字节recvrecvfrom?如果有帮助,我可以接受 Linux 特定的答案。有问题的套接字是 UDP,但我怀疑它对 TCP 无关紧要。

我问的原因只是为了测试和调试目的。我正在尝试验证我对 setsocktop(SO_RCVBUF) 的调用是否设置了足够的大小。知道接收缓冲区是否接近达到其限制将验证是否设置了足够的大小。

4

3 回答 3

3

在 Windows 上,您可以通过ioctlsocket(FIONREAD)和找到您要查找的内容WSAIoCtl(FIONREAD),它们都返回完整缓冲数据的完整大小,即使缓冲了多个数据报消息也是如此。但是,Linux 上没有等价物。有ioctl(FIONREAD),它只返回下一个缓冲消息的大小。

于 2013-05-08T03:35:55.940 回答
2

使用套接字上的SIOCINQ ioctl() 来了解排队的传入字节数。

同样,还有用于查询发送缓冲区的 SIOCOUTQ。

于 2013-05-08T01:37:15.927 回答
0

套接字接收缓冲区的足够大小由链路的带宽延迟乘积给出。带宽 in. Bytes/second 时间延迟(以秒为单位) = 缓冲区大小(以字节为单位)。这个想法是宣传一个足够大的 TCP 窗口,以使发送者可以“填满管道”。您可以提前计算:您不需要在运行时调整它。接近 64k 的尺寸很好。

于 2013-05-07T21:22:55.920 回答