【问题标题】:boost::asio and socket ownershipboost::asio 和套接字所有权
【发布时间】:2010-06-03 13:23:30
【问题描述】:

我有两个类(Negotiator、Client),它们都有自己的 boost::asio::ip::tcp::socket。协商完成后有没有办法将套接字对象传输给客户端。我期待着做这样的事情:

 boost::asio::ip::tcp::socket sock1(io);
 //...
 boost::asio::ip::tcp::socket sock2;
 sock2.assign(sock1); 

这个操作必须保证sock1被销毁时连接不会被关闭。

【问题讨论】:

    标签: c++ sockets boost boost-asio


    【解决方案1】:

    认为你可以:

    • 使用 native() 成员函数获取 sock1 的本机句柄
    • dup()(或 WSADuplicateSocket())sock1 的本机句柄
    • 使用 assing() 成员函数将 dup()-ed 句柄传递给 sock2

    但是:

    • 我不确定,因为我从未尝试过
    • 如果您想转移(而不是共享)从 Negotiator 到 Client 的套接字,Dan 使用动态分配的建议可能更简单,使用 unique_ptr(或 auto_ptr)

    【讨论】:

      【解决方案2】:

      在堆上创建套接字(new),并将指针从协商器传递给客户端。

      【讨论】:

      • 这在接受普通 TCP 套接字然后想将其转换为 ssl 套接字的情况下没有帮助。然后,您确实需要将内部插座从第一个中拔出,然后将其插入第二个。
      【解决方案3】:

      在当前版本的 Boost 中,您现在可以使用

      boost::asio::ip::tcp::socket::my_socket;
      auto my_handle = my_socket.native_handle();
      

      代替旧的native() 成员函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-15
        • 2011-12-05
        • 2018-03-01
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 2021-07-29
        • 1970-01-01
        相关资源
        最近更新 更多