gpt4 book ai didi

c++ - IPV6链路本地多播

转载 作者:可可西里 更新时间:2023-11-01 18:37:21 27 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 IPV6 进行相当于 IPV4 广播的操作。

我正在创建一个非阻塞 IPV6 UDP 套接字。

从侧面广播来看,我实际上只是在端口 12346 上发送“FF02::1”。

在收听方面,我发现我需要加入群组,所以我执行了以下操作:

    ipv6_mreq membership;
memset( &membership.ipv6mr_multiaddr, 0, sizeof( in6_addr ) );
membership.ipv6mr_multiaddr.u.Word[0] = htons( 0xff02 );
membership.ipv6mr_multiaddr.u.Word[7] = htons( 0x0001 );
membership.ipv6mr_interface = 0;

if( enable )
{
if ( 0 != setsockopt( m_Socket, SOL_SOCKET, IPV6_JOIN_GROUP, (char*)&membership, sizeof( ipv6_mreq ) ) )
{
DisplayError();
return false;
}
}

但是 setsockopt 总是返回“WSAENOPROTOOPT”。为什么?谁能帮我解决这个问题?我完全不知所措。

编辑:我将级别更改为“IPPROTO_IPV6”,但现在我得到的是“WSAEINVAL”。

最佳答案

必须为本地范围的 IPv6 设置接口(interface),因为地址仅对接口(interface)唯一。简单来说,地址 fe80::1 可以同时属于 eth0 和 eth1,但它们是完全独立的。

因此这意味着您需要在支持多播的每个up 接口(interface)上显式发送多播数据包,或者为用户提供指定特定接口(interface)的方法。

(编辑)如果有帮助,您可以在此处查看多播代码,

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/

关于c++ - IPV6链路本地多播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3068231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com