1

、、、およびへboost::asio::io_serviceの 共有ポインタがいくつかあります。ユーザー接続を受け入れ、ソケットのshared_ptrを私のクラスに渡します。それはその仕事をします。boost::asio::ip::tcp::endpointboost::asio::ip::tcp::acceptorboost::asio::ip::tcp::socket

今私が欲しいのは単純です-私のトラフィックを数えます。その接続中に送受信されたデータの量に関する情報を取得したい。受け入れられたBoostASIOTCPソケットからそのような情報を取得するにはどうすればよいですか?

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 に答える