一般提升asio流读取问题

时间:2010-01-02 04:54:08

标签: c++ boost-asio

我对如何在asio中读取流中的数据感到困惑。我的主要问题是:

  1. 如果一台计算机同时进行多次异步写入,并且接收计算机上只有一次异步读取,会发生什么情况。通过TCP协议,数据是否有可能交错?
  2. ASIO库如何知道何时调用处理读取流中处理新数据的处理程序?它会调用每个收到的字节吗?当客户端断开连接时?
  3. 是否有使用流的好(和简单)示例,而不是使用asio从tcp套接字读取缓冲区?
  4. 感谢。

1 个答案:

答案 0 :(得分:4)

  

如果一台计算机同时进行多次异步写入,并且接收计算机上只有一次异步读取,会发生什么情况。通过TCP协议,数据是否有可能交错?

如果在正在进行另一个异步写入操作时调用async_write,则结果是未定义的。它类似于在两个不同线程的同一个套接字上同时进行两个write()系统调用。你可能会弄得一大堆数据。

  

ASIO库如何知道何时调用处理读取流中处理新数据的处理程序?它会调用每个收到的字节吗?当客户端断开连接时?

如果您拨打async_read,则会在收到所有请求的数据量时调用回叫。如果你调用async_read_some,它会在至少有一个字节时调用回调,但可能更多。可能是另一端发送的单个TCP数据包的内容。

  

是否有使用流的好(和简单)示例,而不是使用asio从tcp套接字读取缓冲区?

你的意思是asio::iostream? asio文档中有examples