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

Accept IPv4 and IPv6 together in boost::asio

本文关键字:IPv4 IPv6 一起 boost asio      更新时间:2023-10-16

简短而简单的问题:我是boost::asio的新手,我想知道是否可以创建一个同时侦听IPv4和IPv6连接的tcp::acceptor。boost主页上的教程显示了这样的内容:

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

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

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

问题主要出现在IPV6_V6ONLY是否可用或默认值(打开或关闭)方面。因此,我发现最好将其明确设置为您想要的内容。

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

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