我想學習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