5
내가 부스트 : ASIO 사용하고
, 나는이 같은 코드를 가지고 :boost :: asio : 들어오는 연결을 받아들이려면 async_accept를 어떻게 사용합니까?
void CServer::Start(int port)
{
tcp::acceptor acceptor(m_IoService, tcp::endpoint(tcp::v4(), port));
for (;;)
{
shared_ptr<tcp::socket> pSocket(new tcp::socket(m_IoService));
acceptor.accept(*pSocket);
HandleRequest(pSocket);
}
}
이 코드는 작동하지만, 내가 수락 호출 할 수 있도록 채택 :: async_accept 사용으로 전환하고 싶습니다 :: 취소하면 요청 수신이 중지됩니다.
그래서 내 새로운 코드는 다음과 같습니다
void CServer::StartAsync(int port)
{
m_pAcceptor = shared_ptr<tcp::acceptor>(new tcp::acceptor(m_IoService, tcp::endpoint(tcp::v4(), port)));
StartAccept();
}
void CServer::StopAsync()
{
m_pAcceptor->cancel();
}
void CServer::StartAccept()
{
shared_ptr<tcp::socket> pSocket(new tcp::socket(m_IoService));
m_pAcceptor->async_accept(*pSocket, bind(&CServer::HandleAccept, this, pSocket));
}
void CServer::HandleAccept(shared_ptr<tcp::socket> pSocket)
{
HandleRequest(pSocket);
StartAccept();
}
을하지만이 코드가 작동하지 않는 것, 내 기능 CServer :: HandleAccept 호출되지 없구요. 어떤 아이디어? 샘플 코드를 살펴 봤는데, 코드와 소켓 코드의 주요 차이점은 소켓을 멤버로 갖는 tcp_connection과 같은 클래스를 만드는 것 같고 필요한 이유가 표시되지 않는다는 것입니다.
- 알렉스