我有一个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()的给定地址上广播的。