我有几个运行 Linux 2.6.33.9rt 的嵌入式系统。他们通过 wifi 使用 udp 广播进行通信。通信工作得很好,但几分钟后,一些客户端停止发送数据包。不过,他们仍然会收到它们。
我能够使用以下示例代码重现该问题。该代码运行了几分钟垃圾广播消息,然后它就停止了。该程序仍在运行响应。udp 消息不再出现在网络上。
程序停止发送 udp 后,重新启动它的唯一方法是断开并重新连接网络。
任何想法可能导致这种行为?
int main(int argc, char**argv) {
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("255.255.255.255");
addr.sin_port = htons(atoi(argv[1]));
int num = atoi(argv[2]);
int s;
if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
perror("unable to open socket");
exit(1);
}
static int broadcast = 1;
if(setsockopt(s,
SOL_SOCKET,
SO_BROADCAST,
&broadcast,
sizeof(broadcast)) < 0)
{
perror("unable to enable broadcast");
}
for (int i = 0; i < num; ++i)
{
char data[1400];
if (sendto(s, data, 1400, 0,(struct sockaddr *) &addr, sizeof(addr)) < 0)
{
perror("send error");
exit(1);
}
}
close(s);
return 0;
}