为了了解我在处理传入数据方面做得如何,我想测量TCP和UDP套接字的队列长度.
我知道我可以通过SO_RCVBUFsocket选项获取队列大小,并ioctl(<sockfd>, SIOCINQ, &<some_int>)告诉我TCP套接字的信息.但对于UDP,SIOCINQ/ FIONREADioctl仅返回下一个待处理数据报的大小.有没有办法如何获得UDP的队列大小,而不必解析系统表,如/proc/net/udp?
我想了解/ proc/net/udp和/ proc/net/snmp中的每个字段的含义:
# cat /proc/net/udp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
4: 00000000:006F 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 10777 2 ffff88023bbd3a80 0
110: 00000000:4959 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 10975 2 ffff88023bbd30c0 0
122: 00000000:0265 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 10781 2 ffff88023bbd3400 0
# cat /proc/net/snmp
Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors
Udp: 768010194 3069028933 1052487950 17032 68916498 0
Run Code Online (Sandbox Code Playgroud)