Boost :: ASIO : Async_accept를 사용하여 들어오는 연결을 수락하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1087199

문제

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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top