流,短读写
在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