题
我有一个Linux的应用程序,将打开一个UDP插座和结合到一个端口。我没有任何问题的发送单播数据包经过的座。我有机会发送广播分组,因此,我启用SO_BROADCAST,这使得广播报通过,但是后来我注意到,在播报正在广播。这是预期的行为UDP插座,或是它更有可能我已经配置错误的东西吗?
解决方案
据我所知, SO_BROADCAST 是一个套接字选项。因此,如果您在套接字上启用它,则此套接字将进行广播。如果你想用同一个代码进行单播和广播,我想你需要打开不同的套接字。
其他提示
我在这方面没有做太多的编程,但你可能需要提供有关库,操作系统版本,代码等的更多信息。也许是代码示例?
如果我记得我读过的书,如果你在套接字上设置了标志,那将影响从套接字发送的所有数据报,因为套接字基本上是网络标志的数据结构+文件描述符。 / p>
我已经想出同样的问题在Linux上大约有一个插座越来越播和广播在同一时间。我解决了这个问题如下(伪码):
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
- 打开插座
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &1)
- 允许进入和出去广播从这个插座
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()
.
不隶属于 StackOverflow