简短而简单的问题:我是boost::asio
的新手,我想知道是否可以同时创建tcp::acceptor
同时监听IPv4和IPv6连接。关于boost主页的教程显示如下:
_acceptor = new tcp::acceptor(_ioService, tcp::endpoint(tcp::v4(), 3456));
其中始终使用特定协议指定端点。是否不可能同时在同一端口上侦听IPv4和IPv6?
答案 0 :(得分:12)
如果创建IPv6接受器,则在清除IPV6_V6ONLY套接字选项时,它将同时接受IPv4和IPv6连接。 IPv4地址将以IPv4-mapped格式显示为IPv6地址。
问题主要围绕IPV6_V6ONLY是否可用或默认值是什么(打开或关闭)。所以我发现最好将它明确地设置为你想要的。
Windows XP根本不支持该选项。
因此,如果您希望跨系统兼容,建议创建两个套接字,一个用于v4,另一个用于v6设置IPV6_V6ONLY。