5
私はブースト:: ASIOを使用している、と私は、このようなコードを持っている:boost :: asio:着信接続を受け入れるためにasync_acceptを使用するにはどうすればよいですか?
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 :: HandleAcceptと呼ばれることは決してありません。何か案は?私はサンプルコードを見てきました。私のコードとその主な違いは、ソケットをメンバーとして持つtcp_connectionのようなクラスを作ることが多いように見えることです。なぜ必要なのか分かりません。
- アレックス