boost::asio 同时接受 IPv4 和 IPv6
Accept IPv4 and IPv6 together in boost::asio
简短而简单的问题:我是 boost::asio
的新手,我想知道是否可以创建一个 tcp::acceptor
同时监听 IPv4 和 IPv6 连接。 boost主页上的教程是这样的:
_acceptor = new tcp::acceptor(_ioService, tcp::endpoint(tcp::v4(), 3456));
其中始终使用特定协议指定端点。难道不能在同一个端口同时监听IPv4和IPv6吗?
如果您创建 IPv6 接受器,它将接受 IPv4 和 IPv6 连接(如果 IPV6_V6ONLY socket option is cleared. IPv4 addresses will be presented as IPv6 addresses, in the IPv4-mapped 格式)。
问题主要围绕 IPV6_V6ONLY 是否可用或默认值是什么(打开或关闭)。所以我发现最好将其明确设置为您想要的。
此外 Windows XP 根本不支持该选项。
所以如果你想跨系统兼容,建议创建两个套接字,一个用于v4,一个用于v6设置IPV6_V6ONLY。
简短而简单的问题:我是 boost::asio
的新手,我想知道是否可以创建一个 tcp::acceptor
同时监听 IPv4 和 IPv6 连接。 boost主页上的教程是这样的:
_acceptor = new tcp::acceptor(_ioService, tcp::endpoint(tcp::v4(), 3456));
其中始终使用特定协议指定端点。难道不能在同一个端口同时监听IPv4和IPv6吗?
如果您创建 IPv6 接受器,它将接受 IPv4 和 IPv6 连接(如果 IPV6_V6ONLY socket option is cleared. IPv4 addresses will be presented as IPv6 addresses, in the IPv4-mapped 格式)。
问题主要围绕 IPV6_V6ONLY 是否可用或默认值是什么(打开或关闭)。所以我发现最好将其明确设置为您想要的。
此外 Windows XP 根本不支持该选项。
所以如果你想跨系统兼容,建议创建两个套接字,一个用于v4,一个用于v6设置IPV6_V6ONLY。