为了查看我在处理传入数据方面的表现如何,我想测量TCP和UDP套接字上的队列长度。
我知道我可以通过SO_RCVBUF套接字选项获取队列大小,并且可以ioctl(<sockfd>, SIOCINQ, &<some_int>)告诉我有关TCP套接字的信息。但是对于UDP,SIOCINQ/ FIONREADioctl仅返回下一个未决数据报的大小。有没有一种方法可以获取UDP的队列大小,而无需解析系统表,例如/proc/net/udp?
SO_RCVBUF
ioctl(<sockfd>, SIOCINQ, &<some_int>)
SIOCINQ
FIONREAD
/proc/net/udp
如ldx所述,ioctl或getsockopt不支持它。在我看来,SIOCINQ的当前实现旨在确定读取整个等待缓冲区需要多少缓冲区(但我想它并没有那么有用,因为它可以在读取到实际缓冲区之间进行切换读)。
尽管有许多其他遥测技术,但通过此类系统调用均不受支持,我想正常生产中并没有真正的需求。
您可以通过“ netstat -su”检查丢失/错误,或者,如果您只想监视计算机状态,则可以使用SNMP(udpInErrors)更好。
顺便说一句:您始终可以选择入侵内核代码并添加此值(或其他值)。