所以,
我一直在玩 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
方法不会被连续调用?