views:

75

answers:

2

Hello

I've two classes (Negotiator, Client), both has their own boost::asio::ip::tcp::socket. Is there a way to transfer socket object to Client after negotiation is finished. I'm looking forward to do something like that:

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

This operation must guarantee that the connection won't be closed when sock1 is destroyed.

+1  A: 

Create the socket on the heap (new), and pass the pointer from the negotiator to the client.

Dan
+1  A: 

I think that you could:

  • obtain sock1's native handle with the native() member function
  • dup() (or WSADuplicateSocket()) sock1's native handle
  • pass the dup()-ed handle to sock2 with the assing() member function

However:

  • I'm not sure as I never tried that
  • If you want to transfer (instead of sharing) the socket from Negotiator to Client, Dan's suggestion of using dynamic allocation is probably simpler, using unique_ptr (or auto_ptr)
Éric Malenfant