![](/img/trans.png)
[英]Boost.asio: can I do async_read and async_write simultaneously from one thread?
[英]Do I need to care about socket's lifetime in call to async_write?
我這樣調用asio :: async_write:
namespace asio = boost::asio;
using asio::ip::tcp;
using std::string;
shared_pointer<tcp::socket> tcp_socket_pointer;
string message;
...
void send() {
asio::async_write(
*tcp_socket_pointer,
asio::buffer(message),
boost::bind(
&handle_send, // defined elsewhere
asio::placeholders::error,
asio::placeholders::bytes_transferred)
);
}
現在,在我的代碼中,由於tcp_socket_pointer
超出了它的范圍,因此在調用send
和handle_send
傳遞的套接字之間可能會銷毀。
合法嗎 我的意思是,我是否需要確保引用的tcp :: socket一直持續到異步操作完成? 我的直覺告訴我,asio :: async_write立即進行系統調用,所以我不必擔心,但我最好問一下:)。
萬一它沒有按我預期的那樣工作,將tcp_socket_pointer
作為參數傳遞給handle_send
是否是一個好主意,以確保它指向的tcp :: socket不會過期?
您可以使用它,但是當tcp::socket
被銷毀時, async_*
調用將被取消。
您可能想要將shared_ptr保留到套接字,並將其綁定到完成處理程序,以便它保留引用,這確實是您所描述的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.