estoy usando impulso :: asio, y tengo código como este:boost :: asio: ¿Cómo uso async_accept para aceptar conexiones entrantes?
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);
}
}
Este código funciona, pero me gustaría pasar a utilizar aceptador :: async_accept para que pueda llamar aceptador :: cancelar para dejar de recibir solicitudes
Así que mi nuevo código es el siguiente:
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();
}
Pero no parece funcionar este código, mi función CServer :: HandleAccept nunca se llama. ¿Algunas ideas? He observado el código de muestra, y la principal diferencia entre mi código y el de ellos es que a menudo parecen formar una clase como tcp_connection que tiene el socket como miembro, y no veo por qué es necesario.
- Alex