2010-06-03 84 views
3

我有兩個類(Negotiator,Client),都有自己的boost :: asio :: ip :: tcp :: socket。協商完成後,有沒有辦法將套接字對象傳送給客戶端?我期待着做這樣的事情:boost :: asio和socket擁有

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

此操作必須保證當sock1被破壞的連接不會被關閉。

回答

2

認爲,你可以:

  • 獲得sock1的原生手柄與本地()成員函數
  • DUP()(或WSADuplicateSocket())sock1的原生手柄
  • 通過DUP ()-ed處理與assing()成員函數

然而到sock2:

  • 我不知道,因爲我從來沒有試過
  • 如果你想轉移(而不是共享)從談判插座到客戶端,使用動態分配的丹的建議可能是簡單的,使用的unique_ptr(或auto_ptr的)
2

在堆上創建套接字(新建),並將指針從談判器傳遞到客戶端。

+0

這在接受一個普通的TCP套接字然後想要把它變成一個SSL套接字的情況下沒有幫助。那麼你真的需要把內部插座從第一個拉出來,並將其固定在第二個。 – Arvid 2011-08-25 05:16:04

0

由於升壓的當前版本,你會現在

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

,而不是舊native()成員函數獲取句柄。