1 // 2 // impl/io_service.ipp 3 // ~~~~~~~~~~~~~~~~~~~ 4 // 5 // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 // 7 // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 // 10 11 #ifndef ASIO_IMPL_IO_SERVICE_IPP 12 #define ASIO_IMPL_IO_SERVICE_IPP 13 14 15 #include "asio/detail/config.hpp" 16 #include "asio/io_service.hpp" 17 #include "asio/detail/limits.hpp" 18 #include "asio/detail/scoped_ptr.hpp" 19 #include "asio/detail/service_registry.hpp" 20 #include "asio/detail/throw_error.hpp" 21 22 # include "asio/detail/task_io_service.hpp" 23 24 #include "asio/detail/push_options.hpp" 25 26 namespace asio { 27 28 io_service::io_service() 29 : service_registry_(new asio::detail::service_registry( 30 *this, static_cast<impl_type*>(0), 31 (std::numeric_limits<std::size_t>::max)())), 32 impl_(service_registry_->first_service<impl_type>()) 33 { 34 } 35 36 io_service::io_service(std::size_t concurrency_hint) 37 : service_registry_(new asio::detail::service_registry( 38 *this, static_cast<impl_type*>(0), concurrency_hint)), 39 impl_(service_registry_->first_service<impl_type>()) 40 { 41 } 42 43 io_service::~io_service() 44 { 45 delete service_registry_; 46 } 47 48 std::size_t io_service::run() 49 { 50 asio::error_code ec; 51 std::size_t s = impl_.run(ec); 52 asio::detail::throw_error(ec); 53 return s; 54 } 55 56 std::size_t io_service::run(asio::error_code& ec) 57 { 58 return impl_.run(ec); 59 } 60 61 std::size_t io_service::run_one() 62 { 63 asio::error_code ec; 64 std::size_t s = impl_.run_one(ec); 65 asio::detail::throw_error(ec); 66 return s; 67 } 68 69 std::size_t io_service::run_one(asio::error_code& ec) 70 { 71 return impl_.run_one(ec); 72 } 73 74 std::size_t io_service::poll() 75 { 76 asio::error_code ec; 77 std::size_t s = impl_.poll(ec); 78 asio::detail::throw_error(ec); 79 return s; 80 } 81 82 std::size_t io_service::poll(asio::error_code& ec) 83 { 84 return impl_.poll(ec); 85 } 86 87 std::size_t io_service::poll_one() 88 { 89 asio::error_code ec; 90 std::size_t s = impl_.poll_one(ec); 91 asio::detail::throw_error(ec); 92 return s; 93 } 94 95 std::size_t io_service::poll_one(asio::error_code& ec) 96 { 97 return impl_.poll_one(ec); 98 } 99 100 void io_service::stop() 101 { 102 impl_.stop(); 103 } 104 105 bool io_service::stopped() const 106 { 107 return impl_.stopped(); 108 } 109 110 void io_service::reset() 111 { 112 impl_.reset(); 113 } 114 115 void io_service::notify_fork(asio::io_service::fork_event event) 116 { 117 service_registry_->notify_fork(event); 118 } 119 120 io_service::service::service(asio::io_service& owner) 121 : owner_(owner), 122 next_(0) 123 { 124 } 125 126 io_service::service::~service() 127 { 128 } 129 130 void io_service::service::fork_service(asio::io_service::fork_event) 131 { 132 } 133 134 service_already_exists::service_already_exists() 135 : std::logic_error("Service already exists.") 136 { 137 } 138 139 invalid_service_owner::invalid_service_owner() 140 : std::logic_error("Invalid service owner.") 141 { 142 } 143 144 } // namespace asio 145 146 #include "asio/detail/pop_options.hpp" 147 148 #endif // ASIO_IMPL_IO_SERVICE_IPP 149