我有一个 Linux 应用程序,它打开一个 UDP 套接字并将其绑定到一个端口。我通过套接字发送单播数据包没有任何问题。我有机会发送一个广播数据包,所以我启用了 SO_BROADCAST,它允许广播数据包通过,但随后我注意到单播数据包也在广播。这是 UDP 套接字的预期行为,还是我配置错误的可能性更大?
问问题
7488 次
3 回答
3
据我了解SO_BROADCAST是一个套接字选项。所以如果你在你的套接字上启用它,这个套接字就会广播。我想如果您想从相同的代码进行单播和广播,您将需要打开不同的套接字。
于 2009-04-29T01:33:38.203 回答
0
我在这里没有做太多编程,但您可能需要提供有关库、操作系统版本、代码等的更多信息。也许是代码示例?
如果我记得我读过的书,如果你在套接字上设置标志,那将影响从套接字发送的所有数据报,因为套接字基本上是一个网络标志+文件描述符的数据结构。
于 2009-04-29T00:58:52.063 回答
-1
我在 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. 中的警告)。因此,您将收到所有消息。发送的消息要么是单播的,要么是广播的,取决于sendto()
.
于 2009-07-22T13:56:06.453 回答