Boost :: ASIO : Async_accept를 사용하여 들어오는 연결을 수락하는 방법은 무엇입니까?
-
23-08-2019 - |
문제
Boost :: Asio를 사용하고 있으며 다음과 같은 코드가 있습니다.
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 :: handleeccept는 결코 호출되지 않습니다. 어떤 아이디어? 나는 샘플 코드를 살펴 보았고, 내 코드와 그들의 주요 차이점은 소켓을 멤버로서 소켓을 갖는 TCP_Connection과 같은 클래스를 만드는 것처럼 보이며 왜 필요한지 알지 못한다는 것입니다.
- 알렉스
해결책
아, ioservice를 실행 해야하는 물건을 시작하는 것 같습니다.
m_IoService.run();
제휴하지 않습니다 StackOverflow