boost :: asio和socket所有权

时间:2010-06-03 13:23:30

标签: c++ sockets boost boost-asio

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

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

认为你可以:

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

然而:

  • 我不确定,因为我从未尝试过
  • 如果你想传输(而不是共享)从Negotiator到Client的套接字,Dan使用unique_ptr(或auto_ptr)
  • 的建议可能更简单。

答案 2 :(得分:0)

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

获取句柄
boost::asio::ip::tcp::socket::my_socket;
auto my_handle = my_socket.native_handle();

而不是旧的native()成员函数。