ve bu gibi bir kod vardır:boost :: asio: gelen bağlantıları kabul etmek için async_accept'i nasıl kullanırım?
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);
}
}
Bu kod çalışır, ama ben Acceptor çağrı böylece Alıcı :: async_accept kullanarak geçmek istiyorum :: istekleri durdurmak için iptal et.
Yani benim yeni kod şöyle görünür:
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();
}
Ama bu kod çalışmak için görünmüyor, benim fonksiyon CServer :: HandleAccept çağrılan olmadı. Herhangi bir fikir? Örnek kod baktım ve benim kod ve onların onların arasındaki ana fark sık sık bir üye olarak sokete sahip tcp_connection gibi bir sınıf yapmak görünüyor ve neden gerekli olduğunu görmüyorum.
- Alex