流,短读写

在Asio中,很多的I/O对象是流式的,这意味着:

  • 没有消息边界。正在传输的数据是连续的字节(译者注:此处应该是指内存上来说)。
  • 读写操作可能会传输比请求量更少的字节。这是由于短读写操作存在的缘由。

要想使用对象的流模式需要以下的类型支持:

  • SyncReadSteam,异步读取操作由read_some()函数实现。
  • AsyncReadStream,同步读取操作是由async_read_some()函数实现。
  • write操作类似。

流式对象的类有: ip::tcp::socket, ssl::stream<>, posix::stream_descriptor, windows::stream_handle等。

典型情况下,程序想要去传输一个已知长度的字节。当短读写发生的时候,程序必须重启该操作,转而去发送刚刚请求的字节。Asio提供了类函数去自动实现这一需求: read(), async_read(), write() and async_write()。

EOF错误

  • 一串流的尾部可能会导致read, async_read, read_until和async_read_until这些函数出错,比如读到EOF时,任务会提前结束。
  • EOF错误用于标明这种情况,成功读取一个0长度的数据。

参见

async_read(), async_write(), read(), write(), AsyncReadStream, AsyncWriteStream, SyncReadStream, SyncWriteStream

results matching ""

    No results matching ""