2

我编写了一个使用 boost:asio 库的程序,它在 2 个 tcp 服务器之间传输数据。一台服务器使用以下代码发送数据:

std::shared_ptr<std::string> s =
  std::make_shared<std::string>(message);
boost::asio::async_write(socket_, boost::asio::buffer(*s),
  std::bind(&TcpServer::HandleWrite, shared_from_this(), s, _1, _2));

在另一个 TcpServer 中,当我使用 async_read_until 获取数据时,一切正常,但是如果我将 async_read_until 替换为 async_read,则会出现End Of File错误:

boost::asio::streambuf input_buffer;
boost::asio::async_read_until(socket_, input_buffer, match_condition(),
  std::bind(&TcpServer::HandleRead, shared_from_this(), _1));
//boost::asio::async_read(socket_, input_buffer, boost::asio::transfer_all(),
//  std::bind(&TcpServer::HandleRead, shared_from_this(), _1));

如果我boost::asio::transfer_at_least(1)在 async_read 中使用,我可以获得预期的结果。

为什么会这样?

4

1 回答 1

3

eof 错误表示写入方关闭了连接。在此之前发送的任何数据都应该在TcpServer::HandleRead回调中可用。检查bytes_transferred参数以了解阅读器接收了多少数据。

于 2013-07-01T09:45:04.670 回答