1

我有一些指向boost::asio::io_serviceboost::asio::ip::tcp::endpointboost::asio::ip::tcp::acceptor的共享指针boost::asio::ip::tcp::socket。我接受用户连接并将套接字的 shared_ptr 传递给我的某个班级。它做它的工作。

现在我想要的很简单——计算我的流量。我想获取在该连接期间发送和接收了多少数据的信息。如何从接受的 Boost ASIO TCP 套接字中获取此类信息?

4

1 回答 1

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 );
}
于 2011-08-17T18:57:23.443 回答