我有两个类(Negotiator,Client),都有自己的boost::asio::ip::tcp::socket。协商完成后,是否可以将套接字对象传输到客户端。我期待做这样的事情:

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

此操作必须确保在销毁sock1时不会关闭连接。

最佳答案

我认为您可以:

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

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