Как узнать, сколько данных было отправлено через TCP-сокет Boost ASIO?
У меня есть несколько общих указателей на boost::asio::io_service
, boost::asio::ip::tcp::endpoint
, boost::asio::ip::tcp::acceptor
а также boost::asio::ip::tcp::socket
, Я принимаю подключение пользователей и передаю shared_ptr сокета моему классу. Это делает свою работу.
Теперь то, что я хочу, - просто посчитать мой трафик. Я хочу получить информацию о том, сколько данных было отправлено и получено во время этого соединения. Как получить такую информацию из принятого TCP-сокета Boost ASIO?
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 );
}