套接字接收队列中有多less个数据包或字节?

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

我很想知道在调用recvrecvfrom之前是否可以查询缓冲区中有多less数据包(或字节)在缓冲区中? 如果有帮助,我可以解决Linux特定的答案。 有问题的套接字是UDP,但我怀疑这对于TCP来说并不重要。

我问的原因只是为了testing和debugging目的。 我试图validation,如果我的电话setsocktop(SO_RCVBUF)设置足够的大小。 知道接收缓冲区是否接近达到极限将validation是否设置了足够的大小。

在Windows上,通过ioctlsocket(FIONREAD)WSAIoCtl(FIONREAD)可以找到ioctlsocket(FIONREAD) ,即使在缓冲多个数据报消息时,它们也会返回完整大小的完整缓冲数据。 但是,在Linux上没有相同的东西。 有ioctl(FIONREAD) ,它只返回下一个缓冲消息的大小。

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

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

该套接字接收缓冲区的足够大小由该链路的带宽延迟乘积给出。 带宽in。Bytes /秒延迟(秒)=缓冲区大小(以字节为单位)。 这个想法是广告一个足够大的TCP窗口,发件人可以“填充管道”。 你可以预先计算出来:你不需要在运行时调整它。 大小为64K是好的。