首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送和接收具有相同套接字的UDP多播数据包

发送和接收具有相同套接字的UDP多播数据包
EN

Stack Overflow用户
提问于 2020-03-26 19:04:27
回答 1查看 2.2K关注 0票数 3

我找不到这方面的工作示例,所以我将发布一个问题(让我们看看是否可以将其简化为MVP代码示例)。因此,我需要执行mdns查询,我可以使用两个套接字(一个用于发送/另一个用于接收),但到目前为止,我还无法使它与单个套接字一起工作。

因此,我正在执行的步骤是:

枚举主机上的所有接口地址。然后,对于每一位主人:

  • IP_ADD_MEMBERSHIP
  1. 创建到接口地址:5353或组播组地址(其中任何一个导致读写失败)的非阻塞UDP套接字
  2. bind()
  3. Set IP_MULTICAST_IF到本地接口
  4. Set IP_MULTICAST_IF到多播组
  5. ,在kqueue

G 211中添加读/写的套接字

因此,取决于我在步骤2中所做的工作,读写失败:

  1. --如果我将套接字绑定到多播组--我从kqueue获得读取通知并可以读取数据包,但是当我从kqueue获得写通知并尝试用errno 49
  2. 写入它时,如果我将套接字绑定到接口地址,则可以发送数据包,但没有从kqueue

到达读取通知。

那么我需要绑定到哪个地址呢?另外,由于IP_ADD_MEMBERSHIP参数ip_mreq有接口字段,所以真的需要IP_MULTICAST_IF吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-26 19:10:48

如果绑定到特定的接口地址(至少在Linux上),您将无法接收多播。如果绑定到多播地址,则无法发送。

您需要做的是绑定到INADDR_ANY,然后在设置IP_ADD_MEMBERSHIP选项时,设置要接收多播数据包的接口地址。如果您有多个接口,您可以为要绑定到的每个接口调用此接口。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60874399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档