【发布时间】:2014-10-11 14:03:49
【问题描述】:
我正在尝试学习 ASIO boost,但我很难理解它。我想为应该具有可扩展性和高性能的服务器创建一个基本布局。
在以下 URL 中,有一个设置小型 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 answer 试图强调状态和操作之间的区别,这在学习 Boost.Asio 时可能会有所帮助。
标签: c++ networking boost boost-asio