流、短读取和短写入

在Boost.Asio中,许多I/O对象是面向流的。这意味着:

  • 没有消息边界:传输的数据是连续的字节序列。

  • 读取或写入操作可能传输的字节数少于请求的字节数:这称为短读取或短写入。

提供面向流I/O的对象通常满足以下一种或多种类型要求:

  • SyncReadStream:通过名为read_some()的成员函数执行同步读取操作。

  • AsyncReadStream:通过名为async_read_some()的成员函数执行异步读取操作。

  • SyncWriteStream:通过名为write_some()的成员函数执行同步写入操作。

  • AsyncWriteStream:通过名为async_write_some()的成员函数执行异步写入操作。

面向流的I/O对象的示例包括ip::tcp::socketssl::stream<>posix::stream_descriptorwindows::stream_handle等。

程序通常希望传输确切数量的字节。当发生短读取或短写入时,程序必须重新启动操作,并持续执行,直到传输了所需的字节数。Boost.Asio提供了自动执行此操作的通用函数:read()async_read()write()async_write()

EOF为何是错误 流的结束可能导致readasync_readread_untilasync_read_until函数违反其约定。例如,读取N字节可能因EOF而提前结束。EOF错误可用于区分流的结束和成功读取大小为0的情况。

Last updated