2009-04-28 56 views
1

我有一个Linux应用程序打开一个UDP套接字并将其绑定到一个端口。我没有任何问题通过套接字发送单播数据包。我有机会发送一个广播数据包,所以我启用了SO_BROADCAST,它允许广播数据包通过,但后来我注意到单播数据包也在播出。这是一个UDP套接字的预期行为,还是更可能是我错误配置了某些东西?通过相同的套接字UDP广播和单播?

回答

2

从我所了解的SO_BROADCAST是一个套接字选项。所以如果你在套接字上启用它,这个套接字将会广播。我想你会需要打开不同的套接字,如果你想做单播和从相同的代码广播。

+0

谢谢。这就是我正在挖掘的东西。我想我正在期待它做一些它没有设计的事情。第二个套接字应该做的伎俩,但我猜我必须绑定到第二个端口(无赖)。 – 2009-04-29 02:12:32

0

我还没有在这里编写大量的手,但是您可能需要提供有关库,操作系统版本,代码等的更多信息。也许代码示例?

如果我记得我读过的书,如果你在套接字上设置标志,这将影响从套接字发送的所有数据报,因为套接字基本上是网络标志+文件描述符的数据结构。

-1

我已经找到了Linux上同一个问题,就是让套接字在同一时间获得单播和广播。我解决了这个问题如下(伪代码):

  1. sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
    • 打开插座
  2. setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &1)
    • 从该插座允许传入和传出的广播
  3. bind(sock, bindaddr, sizeof(struct sockaddr)

bindaddr.sin_family = AF_INET

bindaddr.sin_port = <YourPort>

bindaddr.sin_addr.s_addr = INADDR_ANY

  • 得到任何卡上的所有传入邮件<YourPort>

需要说明的是,有没有过滤(见警告在第3)。所以你会得到所有的消息。 发送的消息要么是单播的,要么在sendto()的给定地址上广播。

+0

你能解释一下那&1是什么意思? – dashesy 2012-10-31 15:05:20