【发布时间】:2014-01-07 04:03:25
【问题描述】:
我正在使用 C++ boost asio 库,我在其中侦听套接字上的新连接。在获得连接后,我处理请求,然后在循环中侦听另一个套接字上的新连接。
while (true)
{
tcp::socket soc(this->blitzIOService);
this->blitzAcceptor.listen();
boost::system::error_code ec;
this->blitzAcceptor.accept(soc,ec);
if (ec)
{
// Some error occured
cerr << "Error Value: " << ec.value() << endl;
cerr << "Error Message: " << ec.message() << endl;
soc.close();
break;
}
else
{
this->HandleRequest(soc);
soc.shutdown(tcp::socket::shutdown_both);
soc.close();
}
}
据我了解,它应该始终在 this->blitzAcceptor.accept(soc,ec); 处阻塞,并且每次建立新连接时,它都应该在 this->HandleRequest 中处理它(soc); 并再次在 this->blitzAcceptor.accept(soc,ec);
处阻止但我看到的是,它第一次会在 this->blitzAcceptor.accept(soc,ec) 处阻塞,当建立新连接时它会处理请求,但是而不是在 this->blitzAcceptor.accept(soc,ec) 再次阻塞,它将继续进入 this->HandleRequest(soc); 并在 soc 阻塞.receive(); 里面。
这并不总是发生,但大部分时间都会发生。这种行为可能是什么原因,我如何确保它始终在 this->blitzAcceptor.accept(soc,ec) 处阻塞,直到发出新请求?
【问题讨论】:
标签: c++ boost boost-asio