gpt4 book ai didi

c++ - boost::asio::async_read 获取文件结尾错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:43 25 4
gpt4 key购买 nike

我写了一个使用 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),我可以获得预期的结果。

为什么会这样?

最佳答案

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

关于c++ - boost::asio::async_read 获取文件结尾错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17401036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com