typedef boost::shared_ptr<session> session_ptr;
class server
class server
{
public:
server(boost::asio::io_service& io_service, short port)
: io_service_(io_service),
acceptor_(io_service, tcp::endpoint(tcp::v4(), port))
{
session_ptr new_session(new session(io_service_));
// 비동기로 accept 되면,
// 단 한번만 callback을 호출하는걸 알 수 있다.
// 왜냐면, callback 에서 또 async_accept() 하니까
// 비동기로 accept 되면,
// 단 한번만 callback을 호출하는걸 알 수 있다.
// 왜냐면, callback 에서 또 async_accept() 하니까
acceptor_.async_accept(new_session->socket(),
boost::bind(&server::handle_accept, this, new_session,
boost::asio::placeholders::error));
}
void handle_accept(session_ptr new_session,
const boost::system::error_code& error)
{
if (!error)
{
// session은 이 때 시작된다.
// 자세한 동작은 다음 글에서...
// session은 이 때 시작된다.
// 자세한 동작은 다음 글에서...
new_session->start();
}
// shared_ptr.reset()을 호출해서 새 session을 만들고 있다.
new_session.reset(new session(io_service_));
// 다음 연결을 accept하러 고고싱~
// 서버는 죽어라 session만 만드는구나...
// 다음 연결을 accept하러 고고싱~
// 서버는 죽어라 session만 만드는구나...
acceptor_.async_accept(new_session->socket(),
boost::bind(&server::handle_accept, this, new_session,
boost::asio::placeholders::error));
}
private:
boost::asio::io_service& io_service_;
tcp::acceptor acceptor_;
};
결론:
. server class는 C의 socket(), accept(), listen()을 사용한 전통적인 서버와 비슷한 역할을 한다.
의문점:
. session class의 정체
. socket인 것 같다.
. 다음 글에 설명한다.
. session은 언제 소멸되나?
. 연결이 종료되면 알아서???
결론:
. server class는 C의 socket(), accept(), listen()을 사용한 전통적인 서버와 비슷한 역할을 한다.
의문점:
. session class의 정체
. socket인 것 같다.
. 다음 글에 설명한다.
. session은 언제 소멸되나?
. 연결이 종료되면 알아서???