[英]Does Asio's write_some really return immediately?
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.