UDP通过相同的套接字广播和单播?

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

在python中,start_new_thread不是执行socket accept的函数

Multipe Send()和Recv()使用Winsock2

有没有办法获得unix套接字连接的另一端的uid

在socket.close被调用之后,socket.read_some需要一段时间才能返回

独立进程之间的套接字句柄传输

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

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

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

我已经找到了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()的给定地址上广播的。

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...