boost :: asio :: async_read得到文件结束错误

时间:2013-07-01 09:21:00

标签: c++ networking boost-asio

我编写了一个使用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));

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

为什么会这样?

1 个答案:

答案 0 :(得分:3)

eof错误表示编写者端关闭了连接。在此之前发送的任何数据仍应在TcpServer::HandleRead回调中可用。检查bytes_transferred参数以了解读者收到的数据量。