如何使提升asio async_accept只接受一个连接?

时间:2015-06-17 18:33:51

标签: boost boost-asio

我在http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/examples/cpp11_examples.html中使用了这个例子 HTTP服务器

如何将示例更改为一次只接受一个连接。这只是在前一个连接完成时接受下一个连接。

由于

2 个答案:

答案 0 :(得分:1)

server::do_accept中,只需包含最后一行(即启动另一行async_accept)。

void server::do_accept()
{
  acceptor_.async_accept(socket_,
      [this](boost::system::error_code ec)
      {
        // Check whether the server was stopped by a signal before this
        // completion handler had a chance to run.
        if (!acceptor_.is_open())
        {
          return;
        }

        if (!ec)
        {
          connection_manager_.start(std::make_shared<connection>(
              std::move(socket_), connection_manager_, request_handler_));
        }

        // do_accept(); // REMOVE THIS LINE
      });
}

正如您所看到的,已经用于停止接受关闭时的连接。

答案 1 :(得分:0)

我做过:

            if (0 == connection_manager_.size()) {
            connection_manager_.start(std::make_shared<connection>(
                            std::move(socket_), connection_manager_, request_handler_));
            } else {
                std::move(socket_).close();
            }