Ich bin mit boost :: asio, und ich habe Code wie folgt:boost :: asio: Wie verwende ich async_accept, um eingehende Verbindungen zu akzeptieren?
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);
}
}
Dieser Code funktioniert, aber ich möchte mit Acceptor wechseln :: async_accept so dass ich Acceptor nennen :: Abbrechen, um den Empfang von Anfragen zu beenden.
Also meine neue Code sieht wie folgt aus:
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();
}
Aber dieser Code scheint nicht, meine Funktion CServer zu arbeiten :: HandleAccept wird nie aufgerufen. Irgendwelche Ideen? Ich habe Beispielcode angeschaut, und der Hauptunterschied zwischen meinem Code und ihren ist, dass sie oft eine Klasse wie tcp_connection machen, die den Socket als Mitglied hat, und ich sehe nicht, warum das nötig ist.
- Alex