非同期メソッドを使用すると仮定すると、に指定された完了ハンドラー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 );
}