我有一个Linux的应用程序,将打开一个UDP插座和结合到一个端口。我没有任何问题的发送单播数据包经过的座。我有机会发送广播分组,因此,我启用SO_BROADCAST,这使得广播报通过,但是后来我注意到,在播报正在广播。这是预期的行为UDP插座,或是它更有可能我已经配置错误的东西吗?

有帮助吗?

解决方案

据我所知, SO_BROADCAST 是一个套接字选项。因此,如果您在套接字上启用它,则此套接字将进行广播。如果你想用同一个代码进行单播和广播,我想你需要打开不同的套接字。

其他提示

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

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

我已经想出同样的问题在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.).所以你会得到所有消息。发送消息要么被单播或广播depedning上给的地址 sendto().

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top