gpt4 book ai didi

c++ - Boost Asio async_read 不会停止阅读?

转载 作者:行者123 更新时间:2023-11-30 01:00:58 26 4
gpt4 key购买 nike

所以,

我一直在研究 Boost asio 函数和套接字(特别是异步读/写)。现在,我认为 boost::asio::async_read 只在网络连接传入新缓冲区时才调用处理程序...但是它不会停止读取同一个缓冲区,因此会继续调用处理程序。我已经能够通过检查传输的字节数来缓解它,但它基本上处于一个繁忙的等待循环中,浪费 CPU 周期。

这是我的:

class tcp_connection : : public boost::enable_shared_from_this<tcp_connection> 
{
public:
// other functions here

void start()
{
boost::asio::async_read(socket_, boost::asio::buffer(buf, TERRAINPACKETSIZE),
boost::bind(&tcp_connection::handle_read, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}

private:
const unsigned int TERRAINPACKETSIZE = 128;
char buf[TERRAINPACKETSIZE];


void handle_read(const boost::system::error_code& error, size_t bytesT)
{
if (bytesT > 0)
{
// Do the packet handling stuff here
}

boost::asio::async_read(socket_, boost::asio::buffer(buf, TERRAINPACKETSIZE),
boost::bind(&tcp_connection::handle_read, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
};

有些东西被删掉了,但基本上会创建一个新连接,然后调用 start()。是否缺少某些东西,以致于不会连续调用 handle_read 方法?

最佳答案

一个疯狂的猜测:你检查handle_read中的error了吗?如果套接字由于某种原因处于错误状态,我猜想 handle_readasync_read 的嵌套调用将立即“完成”,导致立即调用 handle_read

关于c++ - Boost Asio async_read 不会停止阅读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1639286/

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