Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ASIO_POSIX_STREAM_DESCRIPTOR_SERVICE_HPP
00012 #define ASIO_POSIX_STREAM_DESCRIPTOR_SERVICE_HPP
00013
00014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00015 # pragma once
00016 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
00017
00018 #include "asio/detail/push_options.hpp"
00019
00020 #include "asio/detail/push_options.hpp"
00021 #include <cstddef>
00022 #include <boost/config.hpp>
00023 #include "asio/detail/pop_options.hpp"
00024
00025 #include "asio/error.hpp"
00026 #include "asio/io_service.hpp"
00027 #include "asio/detail/epoll_reactor.hpp"
00028 #include "asio/detail/kqueue_reactor.hpp"
00029 #include "asio/detail/select_reactor.hpp"
00030 #include "asio/detail/service_base.hpp"
00031 #include "asio/detail/reactive_descriptor_service.hpp"
00032
00033 #if !defined(ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
00034 # if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
00035 # define ASIO_HAS_POSIX_STREAM_DESCRIPTOR 1
00036 # endif // !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
00037 #endif // !defined(ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
00038
00039 #if defined(ASIO_HAS_POSIX_STREAM_DESCRIPTOR) \
00040 || defined(GENERATING_DOCUMENTATION)
00041
00042 namespace asio {
00043 namespace posix {
00044
00046 class stream_descriptor_service
00047 #if defined(GENERATING_DOCUMENTATION)
00048 : public asio::io_service::service
00049 #else
00050 : public asio::detail::service_base<stream_descriptor_service>
00051 #endif
00052 {
00053 public:
00054 #if defined(GENERATING_DOCUMENTATION)
00055
00056 static asio::io_service::id id;
00057 #endif
00058
00059 private:
00060
00061 #if defined(ASIO_HAS_EPOLL)
00062 typedef detail::reactive_descriptor_service<
00063 detail::epoll_reactor<false> > service_impl_type;
00064 #elif defined(ASIO_HAS_KQUEUE)
00065 typedef detail::reactive_descriptor_service<
00066 detail::kqueue_reactor<false> > service_impl_type;
00067 #elif defined(ASIO_HAS_DEV_POLL)
00068 typedef detail::reactive_descriptor_service<
00069 detail::dev_poll_reactor<false> > service_impl_type;
00070 #else
00071 typedef detail::reactive_descriptor_service<
00072 detail::select_reactor<false> > service_impl_type;
00073 #endif
00074
00075 public:
00077 #if defined(GENERATING_DOCUMENTATION)
00078 typedef implementation_defined implementation_type;
00079 #else
00080 typedef service_impl_type::implementation_type implementation_type;
00081 #endif
00082
00084 #if defined(GENERATING_DOCUMENTATION)
00085 typedef implementation_defined native_type;
00086 #else
00087 typedef service_impl_type::native_type native_type;
00088 #endif
00089
00091 explicit stream_descriptor_service(asio::io_service& io_service)
00092 : asio::detail::service_base<stream_descriptor_service>(io_service),
00093 service_impl_(asio::use_service<service_impl_type>(io_service))
00094 {
00095 }
00096
00098 void shutdown_service()
00099 {
00100 }
00101
00103 void construct(implementation_type& impl)
00104 {
00105 service_impl_.construct(impl);
00106 }
00107
00109 void destroy(implementation_type& impl)
00110 {
00111 service_impl_.destroy(impl);
00112 }
00113
00115 asio::error_code assign(implementation_type& impl,
00116 const native_type& native_descriptor, asio::error_code& ec)
00117 {
00118 return service_impl_.assign(impl, native_descriptor, ec);
00119 }
00120
00122 bool is_open(const implementation_type& impl) const
00123 {
00124 return service_impl_.is_open(impl);
00125 }
00126
00128 asio::error_code close(implementation_type& impl,
00129 asio::error_code& ec)
00130 {
00131 return service_impl_.close(impl, ec);
00132 }
00133
00135 native_type native(implementation_type& impl)
00136 {
00137 return service_impl_.native(impl);
00138 }
00139
00141 asio::error_code cancel(implementation_type& impl,
00142 asio::error_code& ec)
00143 {
00144 return service_impl_.cancel(impl, ec);
00145 }
00146
00148 template <typename IoControlCommand>
00149 asio::error_code io_control(implementation_type& impl,
00150 IoControlCommand& command, asio::error_code& ec)
00151 {
00152 return service_impl_.io_control(impl, command, ec);
00153 }
00154
00156 template <typename ConstBufferSequence>
00157 std::size_t write_some(implementation_type& impl,
00158 const ConstBufferSequence& buffers, asio::error_code& ec)
00159 {
00160 return service_impl_.write_some(impl, buffers, ec);
00161 }
00162
00164 template <typename ConstBufferSequence, typename WriteHandler>
00165 void async_write_some(implementation_type& impl,
00166 const ConstBufferSequence& buffers, WriteHandler descriptorr)
00167 {
00168 service_impl_.async_write_some(impl, buffers, descriptorr);
00169 }
00170
00172 template <typename MutableBufferSequence>
00173 std::size_t read_some(implementation_type& impl,
00174 const MutableBufferSequence& buffers, asio::error_code& ec)
00175 {
00176 return service_impl_.read_some(impl, buffers, ec);
00177 }
00178
00180 template <typename MutableBufferSequence, typename ReadHandler>
00181 void async_read_some(implementation_type& impl,
00182 const MutableBufferSequence& buffers, ReadHandler descriptorr)
00183 {
00184 service_impl_.async_read_some(impl, buffers, descriptorr);
00185 }
00186
00187 private:
00188
00189 service_impl_type& service_impl_;
00190 };
00191
00192 }
00193 }
00194
00195 #endif // defined(ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
00196
00197
00198 #include "asio/detail/pop_options.hpp"
00199
00200 #endif // ASIO_POSIX_STREAM_DESCRIPTOR_SERVICE_HPP