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

Pue*_*tis 10 c++ ip-address ipv4 ipv6 boost-asio

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

_acceptor = new tcp::acceptor(_ioService, tcp::endpoint(tcp::v4(), 3456));
Run Code Online (Sandbox Code Playgroud)

始终使用特定协议指定端点.是否无法同时在同一端口上侦听IPv4和IPv6?

Sha*_*ell 12

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

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

此外,Windows XP根本不支持该选项.

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