В Дневное время. 3 учебник для boost :: asio (асинхронный TCP-сервер), класс tcp_server
содержит следующие два метода:
void start_accept()
{
tcp_connection::pointer new_connection =
tcp_connection::create(acceptor_.get_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
не имеет смысла регистрировать обработчик ОС, который не останавливается, когда принимает свое первое соединение? Кроме того, это реальная проблема, и как я могу ее исправить?