3

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

2 回答 2

0

将套接字绑定到设备特定的广播地址,在我的例子中是 192.168.5.255,修复了这个错误。我不知道为什么会发生这种情况,但它有效。

于 2013-03-28T15:40:52.903 回答
0

我遇到了同样的问题,我可以保证它取决于您的网卡接口的驱动程序。事实上,我尝试使用外部网卡(例如 Alpha 卡),我不再有这个问题了。我希望这个建议对面临同样问题的其他人有用。

于 2021-05-20T07:02:07.113 回答