【问题标题】:Accepting IPv4 and IPv6 connections on a single port using Boost.Asio使用 Boost.Asio 在单个端口上接受 IPv4 和 IPv6 连接
【发布时间】:2015-09-27 01:45:06
【问题描述】:

我打算使用tcp::acceptor 在单个本地端口上同时接受 IPv4 和 IPv6 连接,例如 55555。我的代码最终是这样的:

tcp::acceptor acceptor_ipv4(io_svc, tcp::endpoint(tcp::v4(), 55555));
tcp::acceptor acceptor_ipv6(io_svc, tcp::endpoint(tcp::v6(), 55555));
acceptor_ipv4.async_accept(socket_ipv4, ...);
acceptor_ipv6.async_accept(socket_ipv6, ...);

我是网络编程和 Boost.Asio 的新手,我想确定这是否是正确的代码,或者是否存在任何可移植性问题。

【问题讨论】:

  • 它是否有效?
  • @JohnZwinck 似乎适用于我的 Win 7 64 位。
  • 好吧,在 Linux 机器上测试它,如果它有效,你就会得到答案。
  • 需要注意的一点是,在某些操作系统上,有一个标志来决定侦听 IPv6 的套接字是只接收 IPv6 连接还是同时接收 IPv4 和 IPv6 连接。如果套接字设置为同时接收 IPv4 和 IPv6,则第二个绑定调用将失败,因为该端口号已在 IPv4 上使用。而且您的代码中似乎没有错误检查,这意味着如果发生该错误,那么刚刚发生的事情可能并不明显。
  • @kasperd 接受器的构造函数将抛出错误,并显示与失败绑定相对应的消息。

标签: c++ network-programming boost-asio ipv6


【解决方案1】:

@kasperd 的评论是正确的,您的实现可能不可移植。
我建议您从伟人本人那里阅读此内容:Are you ready for IPV6?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    相关资源
    最近更新 更多