我有一些指向boost::asio::io_service
,boost::asio::ip::tcp::endpoint
,boost::asio::ip::tcp::acceptor
和boost::asio::ip::tcp::socket
的分享指针。我接受用户连接并将套接字的shared_ptr传递给我的某些类。它做了它的工作。
现在我想要的很简单 - 计算我的流量。我想获得有关在该连接期间发送和接收的数据量的信息。如何从接受的Boost ASIO TCP套接字中获取此类信息?
答案 0 :(得分:1)
假设您使用异步方法,赋予async_read
的完成处理程序将指示接收的字节数。类似地,给async_write
的完成处理程序将指示写入的字节数。将运行计数器维护为类的成员,将方法绑定为前面描述的完成处理程序,这是微不足道的。
#include <boost/asio.hpp>
#include <iostream>
class Socket
{
public:
Socket(
boost::asio::io_service& io_service
) :
_socket( io_service ),
_counter( 0 )
{
}
void readHandler(
const boost::system::error_code& error,
std::size_t bytes_transferred
)
{
_counter += bytes_transferred;
}
void writeHHandler(
const boost::system::error_code& error,
std::size_t bytes_transferred
)
{
_counter += bytes_transferred;
}
private:
boost::asio::ip::tcp::socket _socket;
std::size_t _counter;
};
int
main()
{
boost::asio::io_service io_service;
Socket foo( io_service );
}