Я пытаюсь изучить ASIO boost, но мне трудно понять его. Я хотел бы сделать базовый макет для сервера, который должен быть масштабируемым и эффективным.Не принимается при обращении с async_accept?
В следующем 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] (http://stackoverflow.com/a/15883510/1053968) ответ пытается подчеркнуть различие между государством и операциями, что может быть полезно при обучении Boost.Asio. –