gpt4 book ai didi

c - UDP 广播在 Linux 2.6.33.9 rt 上一段时间后中断

转载 作者:太空狗 更新时间:2023-10-29 11:22:38 25 4
gpt4 key购买 nike

我有几个运行 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;
}

最佳答案

将套接字绑定(bind)到设备特定的广播地址,在我的例子中是 192.168.5.255,修复了这个错误。我不知道为什么会这样,但它确实有效。

关于c - UDP 广播在 Linux 2.6.33.9 rt 上一段时间后中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15640594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com