2

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

4

3 回答 3

3

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

于 2009-04-29T01:33:38.203 回答
0

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

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

于 2009-04-29T00:58:52.063 回答
-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().

于 2009-07-22T13:56:06.453 回答