summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/asio/example/cpp03/http/server2/io_context_pool.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/asio/example/cpp03/http/server2/io_context_pool.hpp')
-rw-r--r--src/boost/libs/asio/example/cpp03/http/server2/io_context_pool.hpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/boost/libs/asio/example/cpp03/http/server2/io_context_pool.hpp b/src/boost/libs/asio/example/cpp03/http/server2/io_context_pool.hpp
new file mode 100644
index 000000000..86bd5b45a
--- /dev/null
+++ b/src/boost/libs/asio/example/cpp03/http/server2/io_context_pool.hpp
@@ -0,0 +1,58 @@
+//
+// io_context_pool.hpp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef HTTP_SERVER2_IO_SERVICE_POOL_HPP
+#define HTTP_SERVER2_IO_SERVICE_POOL_HPP
+
+#include <boost/asio.hpp>
+#include <list>
+#include <vector>
+#include <boost/noncopyable.hpp>
+#include <boost/shared_ptr.hpp>
+
+namespace http {
+namespace server2 {
+
+/// A pool of io_context objects.
+class io_context_pool
+ : private boost::noncopyable
+{
+public:
+ /// Construct the io_context pool.
+ explicit io_context_pool(std::size_t pool_size);
+
+ /// Run all io_context objects in the pool.
+ void run();
+
+ /// Stop all io_context objects in the pool.
+ void stop();
+
+ /// Get an io_context to use.
+ boost::asio::io_context& get_io_context();
+
+private:
+ typedef boost::shared_ptr<boost::asio::io_context> io_context_ptr;
+ typedef boost::asio::executor_work_guard<
+ boost::asio::io_context::executor_type> io_context_work;
+
+ /// The pool of io_contexts.
+ std::vector<io_context_ptr> io_contexts_;
+
+ /// The work that keeps the io_contexts running.
+ std::list<io_context_work> work_;
+
+ /// The next io_context to use for a connection.
+ std::size_t next_io_context_;
+};
+
+} // namespace server2
+} // namespace http
+
+#endif // HTTP_SERVER2_IO_SERVICE_POOL_HPP