[英]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.