2017-02-09 53 views
1

async_connect成功地使用它作爲一個免費的功能和lambda作爲connect_handler執行如下成員函數:如何調用提振async_connect如使用蘭巴作爲連接處理器

auto self(shared_from_this()); 
boost::asio::async_connect(m_socket, endpoint_iter, [this, self](boost::system::error_code ec, tcp::resolver::iterator){...} 

不過,現在我被迫使用no_delay標誌。關於此條目boost::asio with no_delay not possible?我必須調用async_connect作爲套接字的成員函數。嘗試如下

m_socket.async_connect(endpoint_iter->endpoint(), [this, self](boost::system::error_code ec, tcp::resolver::iterator){...} 

我的編譯器(VS2013)給我一個錯誤Error 1 error C2338: ConnectHandler type requirements not met

是否有人爲的想法,怎麼做是正確的?

回答

1

自由功能async_connect的處理程序簽名應該是:

void handler(const boost::system::error_code& error, Iterator iterator); 

成員函數basic_stream_socket::async_connect的處理程序簽名應該是:

void handler(const boost::system::error_code& error); 

的原因是你給多個端點到自由函數然後給你一個迭代器,告訴你哪一個被連接,而你只給一個端點給成員函數,而不必告訴你哪一個被連接,因爲你只提供一個。

因此,爲了使你的代碼工作,你很可能只需要您的拉姆達回調的參數刪除迭代:

m_socket.async_connect(endpoint_iter->endpoint(), [this, self](boost::system::error_code ec){...} 
+1

非常感謝您!我只是驗證它,它的工作! – GregPhil

相關問題