비동기 메서드를 사용한다고 가정하면 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);
}
이것은 사용자 코드에서 할 수있는 작업입니다. 부스트에서 도움이 필요하지 않습니다. –
@J T : 확장 가능한 서버를 만들려고합니다. 나는 서비스의 개념을 가지고있다. 각 사용자 요청에 따라 각 서비스에 소켓을 전달합니다. 그리고이 연결이 얼마나 많은 트래픽을 사용했는지 알고 싶습니다. – Rella