지금의 C++ 표준은 03 이 아닌 C++11 이다. 새로운 시대에 맞게 Asio 프로그래밍을 할 때 C++11 표준을 사용하는 것이 좋다.

 

C++03 표준을 사용하여 Asio를 사용할 때는 AsioAccept, Send, Receive 등의 비동기 함수에 완료 함수를 등록할 때 boost::bind를 사용하였지만 C++11 에서는 lambda를 사용한다.

 

Asio에서 리모트의 접속을 받아들이는 함수 async_accept C++03에서는 아래와 같은 방식으로사용했다.

 

boost::asio::ip::tcp::acceptor m_acceptor;

 

void handle_accept(Session* pSession, const boost::system::error_code& error)

{

if (!error)

{     

       std::cout << "클라이언트 접속 성공" << std::endl;

                   

       pSession->PostReceive();

}

}

 

m_acceptor.async_accept( m_pSession->Socket(),

                    boost::bind(&TCP_Server::handle_accept,

                           this,

                           m_pSession,

                           boost::asio::placeholders::error)

                    );

 

위의 코드를 C++11 방식으로 바꾸면 아래와 같다.

m_acceptor.async_accept( m_pSession->Socket(),

                     [this](boost::system::error_code error)

                    {

                       if (!error)

                       {  

                          std::cout << "클라이언트 접속 성공" << std::endl;

                          m_pSession->PostReceive();

                       }

                      

                       StartAccept();

                    }

                    );

 

 

 

저작자 표시
신고
by 흥배 2013.08.12 08:00

티스토리 툴바