簡體   English   中英

在調用async_write時是否需要考慮套接字的生命周期?

[英]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超出了它的范圍,因此在調用sendhandle_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM