我想学习ASIO的提升,但我很难理解它。我想为应该可扩展和高性能的服务器制作基本布局。处理async_accept时不接受?
在下面的网址则存在一个小的TCP服务器设置一个例子: http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html
我不明白的是以下部分:
void start_accept()
{
tcp_connection::pointer new_connection =
tcp_connection::create(acceptor_.io_service());
acceptor_.async_accept(new_connection->socket(),
boost::bind(&tcp_server::handle_accept, this, new_connection,
boost::asio::placeholders::error));
}
void handle_accept(tcp_connection::pointer new_connection,
const boost::system::error_code& error)
{
if (!error)
{
new_connection->start();
start_accept();
}
}
start_accept()最终调用async_accept ()在接收数据时调用它的处理函数。 处理程序在完成时调用start_accept()。
但是,如果客户端在处理程序仍在运行时尝试连接,会发生什么情况?是不是因为async_accept()不再被监听而无法处理请求?
如果我以错误的视角看待事情,我希望你能指引我正确的方向。
[This](http://stackoverflow.com/a/15883510/1053968)答案试图强调状态和操作之间的区别,这在学习Boost.Asio时可能会有所帮助。 – 2014-10-11 17:33:28