簡體   English   中英

Asio 的 write_some 真的會立即返回嗎?

[英]Does Asio's write_some really return immediately?

根據https://www.boost.org/doc/libs/1_73_0/doc/html/boost_asio/reference/basic_stream_socket/write_some/overload1.html

function 調用 (write_some) 將阻塞,直到成功寫入一個或多個字節的數據,或者直到發生錯誤。

這是 function:

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers);

如我們所見,傳遞了對緩沖區的引用,這意味着write_some的實現必須立即完全消耗緩沖區。 它不能借用緩沖區供自己稍后寫入(寫入文件描述符)。

但是,頁面中的解釋表明它確實是這樣做的:一旦寫入第一個字節,它就可以返回並繼續寫入剩余的字節。 這怎么可能? 調用后可能會破壞對緩沖區的引用。

basic_stream_socket::write_some等效於 Berkley 套接字send() (或write() )function。

通常send()會阻塞,直到所有字節都發送完畢。 但在極少數情況下,它可能會在僅傳輸部分數據的那一刻被SIGNAL處理程序或超時SO_SNDTIMEO中斷。 在這種情況下, send返回發送的字節數( one or more bytes )。 並且應該在緩沖區中前進並稍后發送剩余的字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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