Как узнать, сколько данных было отправлено через TCP-сокет Boost ASIO? - PullRequest
1 голос
/ 17 августа 2011

У меня есть несколько общих указателей на 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 Ответ

1 голос
/ 17 августа 2011

Если вы используете асинхронные методы, обработчик завершения, заданный для 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 );
}
...