在boost :: asio中一起接受IPv4和IPv6

时间:2015-06-29 20:44:07

标签: c++ boost-asio ip-address ipv6 ipv4

简短而简单的问题:我是boost::asio的新手,我想知道是否可以同时创建tcp::acceptor同时监听IPv4和IPv6连接。关于boost主页的教程显示如下:

_acceptor = new tcp::acceptor(_ioService, tcp::endpoint(tcp::v4(), 3456));

其中始终使用特定协议指定端点。是否不可能同时在同一端口上侦听IPv4和IPv6?

1 个答案:

答案 0 :(得分:12)

如果创建IPv6接受器,则在清除IPV6_V6ONLY套接字选项时,它将同时接受IPv4和IPv6连接。 IPv4地址将以IPv4-mapped格式显示为IPv6地址。

问题主要围绕IPV6_V6ONLY是否可用或默认值是什么(打开或关闭)。所以我发现最好将它明确地设置为你想要的。

Windows XP根本不支持该选项。

因此,如果您希望跨系统兼容,建议创建两个套接字,一个用于v4,另一个用于v6设置IPV6_V6ONLY。