为了了解我在处理传入数据方面做得如何,我想测量TCP和UDP套接字的队列长度.
我知道我可以通过SO_RCVBUFsocket选项获取队列大小,并ioctl(<sockfd>, SIOCINQ, &<some_int>)告诉我TCP套接字的信息.但对于UDP,SIOCINQ/ FIONREADioctl仅返回下一个待处理数据报的大小.有没有办法如何获得UDP的队列大小,而不必解析系统表,如/proc/net/udp?
我知道我可以使用这些函数的默认最大缓冲区大小是65507(5535 - IPv4标头 - UDP标头).但是,有没有办法改变这个?我需要能够发送更大的缓冲区~66000字节.我尝试使用setsockopt()函数,但似乎没有用.
谢谢!
如何在 C 中刷新 UDP 套接字的输入缓冲区(如果存在这种情况)?
我正在嵌入式 Linux 环境中工作,并使用 C 来创建一些本机应用程序。在同一个网络上有几台这样的嵌入式机器,当其中一台发生事件时(我们称之为吹哨人),吹哨人应该向网络广播地址发送网络消息,以便所有机器在网络(包括 WHISTLE-BLOWER)知道该事件并根据它执行一些操作。顺便说一下,我正在使用UDP套接字...
这是它的伪代码:
main
{
startNetworkListenerThread( networkListenerFunction );
while( not received any SIGTERM or such )
{
localEventInfo = checkIfTheLocalEventOccured();
broadcastOnNetwork( localEventInfo );
}
}
networkListenerFunction
{
bindSocket;
while( not SIGTERM )
{
// THIS IS WHERE I WANT TO FLUSH THE RECV BUFFER...
recv_data = recvfrom( socket );
if( validate recv data )
{
startExecuteLocalAction;
sleep( 5 );
stopExecuteLocalAction;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我期望并希望使用此代码的方式是:
1. LOCAL_EVENT occured
2. …Run Code Online (Sandbox Code Playgroud) 我有多个线程需要将UDP数据包发送到不同的IP地址(仅发送,不需要接收任何内容)。我可以在所有线程中重复使用相同的 UDP 套接字吗?