我无法为此找到一个有效的示例,因此我将发布一个问题(让我们看看是否可以将其简化为MVP代码示例)。因此,我需要执行mdns查询,我可以使用两个套接字(一个用于发送,第二个用于接收),但到目前为止,我还无法使它与单个套接字一起使用。
所以我正在执行的步骤是:
枚举主机上的所有接口地址。然后对于每个主机:
因此,根据我在步骤2中的操作,读取或写入都会失败:
那么我需要绑定到哪个地址?另外,由于IP_ADD_MEMBERSHIP
参数ip_mreq
具有接口字段,因此我真的需要IP_MULTICAST_IF
吗?
如果绑定到特定的接口地址(至少在Linux上,则将无法接收多播。如果绑定到多播地址,则无法发送。
您需要做的是绑定到INADDR_ANY
,然后在设置IP_ADD_MEMBERSHIP
选项时,设置要在其上接收多播数据包的接口地址。如果有多个接口,则可以为要绑定到的每个接口调用此接口。