有多少数据包或字节在套接字接收队列?(How many packets or bytes are i

2019-09-02 04:52发布

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

我很好奇,想知道是否有可能调用之前查询多少数据报数据包(或字节)实际上是在缓冲区recvrecvfrom ? 如果有帮助,我可以解决一个Linux具体的答案。 有问题的插座是UDP,但我怀疑这会不会对TCP无所谓。

为什么我想问的原因是仅用于测试和调试。 我试图验证,如果我的呼吁setsocktop(SO_RCVBUF)是设置足够的足够大小。 知道,如果接收缓冲区是有史以来接近达到极限,如果有足够大小设置将验证。

Answer 1:

在Windows上,你正在寻找的是通过提供ioctlsocket(FIONREAD)WSAIoCtl(FIONREAD)它们都返回完整的缓冲数据的全尺寸,即使在多个数据报消息缓冲。 但是,在Linux上没有等价的。 有ioctl(FIONREAD)其中仅返回下一个缓冲消息的大小。



Answer 2:

使用SIOCINQ的ioctl()的插座,以了解输入的排队的字节的数量。

同样有SIOCOUTQ查询发送缓冲区。



Answer 3:

为插座上的足够的尺寸接收缓冲器由该链接的带宽时延乘积给出。 带宽英寸字节/秒的时间以秒延迟=缓冲区大小以字节计。 我们的想法是通告TCP窗口足够大,发送者可以“补管”。 就可以计算出提前:你不需要调整它在运行时。 对64K大小都不错。



文章来源: How many packets or bytes are in the socket receive queue?