2011-08-17 8 views
1

boost::asio::io_serviceboost::asio::ip::tcp::endpointboost::asio::ip::tcp::acceptorおよびboost::asio::ip::tcp::socketへの共有ポインタがあります。私はユーザーの接続を受け入れ、ソケットのshared_ptrを自分のクラスに渡します。それはその仕事をします。Boost ASIO TCPソケット接続を介して送信されたデータの量を調べる方法は?

私が欲しいものは簡単です - 私のトラフィックを数えてください。私は、その接続中にどのくらいのデータが送受信されたかという情報を取得したいと思います。どのように受け入れられたBoost ASIO TCPソケットからそのような情報を取得するのですか?

+3

これはあなた自身のコードで行うことができます。あなたはブーストの助けを必要としません。 –

+0

@J T:拡張可能なサーバーを作成しようとしています。私はサービスのコンセプトを持っています。私は、各ユーザーの要求ごとに各サービスにソケットを渡します。そして、私はこの接続がどれくらいのトラフィックを使用したかを知りたいです。 – Rella

答えて

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); 
} 
+0

あるいは、私がshared_ptrを渡して、いくつかの共有ライブラリ(私のサーバー作成者によって作られていない)の中にあるサービスクラスにソケットをブーストするような場合は、ユーザーとエンドサービスの間でtcpプロキシサービスを作成する方が簡単です。 – Rella

関連する問題