1 //
2 // posix/descriptor_base.hpp
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 BOOST_ASIO_POSIX_DESCRIPTOR_BASE_HPP
12 #define BOOST_ASIO_POSIX_DESCRIPTOR_BASE_HPP
13 
14 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15 # pragma once
16 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17 
18 #include <boost/asio/detail/config.hpp>
19 
20 #if defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR) \
21   || defined(GENERATING_DOCUMENTATION)
22 
23 #include <boost/asio/detail/io_control.hpp>
24 #include <boost/asio/detail/socket_option.hpp>
25 
26 #include <boost/asio/detail/push_options.hpp>
27 
28 namespace boost {
29 namespace asio {
30 namespace posix {
31 
32 /// The descriptor_base class is used as a base for the basic_stream_descriptor
33 /// class template so that we have a common place to define the associated
34 /// IO control commands.
35 class descriptor_base
36 {
37 public:
38   /// (Deprecated: Use non_blocking().) IO control command to set the blocking
39   /// mode of the descriptor.
40   /**
41    * Implements the FIONBIO IO control command.
42    *
43    * @par Example
44    * @code
45    * boost::asio::posix::stream_descriptor descriptor(io_service);
46    * ...
47    * boost::asio::descriptor_base::non_blocking_io command(true);
48    * descriptor.io_control(command);
49    * @endcode
50    *
51    * @par Concepts:
52    * IoControlCommand.
53    */
54 #if defined(GENERATING_DOCUMENTATION)
55   typedef implementation_defined non_blocking_io;
56 #else
57   typedef boost::asio::detail::io_control::non_blocking_io non_blocking_io;
58 #endif
59 
60   /// IO control command to get the amount of data that can be read without
61   /// blocking.
62   /**
63    * Implements the FIONREAD IO control command.
64    *
65    * @par Example
66    * @code
67    * boost::asio::posix::stream_descriptor descriptor(io_service);
68    * ...
69    * boost::asio::descriptor_base::bytes_readable command(true);
70    * descriptor.io_control(command);
71    * std::size_t bytes_readable = command.get();
72    * @endcode
73    *
74    * @par Concepts:
75    * IoControlCommand.
76    */
77 #if defined(GENERATING_DOCUMENTATION)
78   typedef implementation_defined bytes_readable;
79 #else
80   typedef boost::asio::detail::io_control::bytes_readable bytes_readable;
81 #endif
82 
83 protected:
84   /// Protected destructor to prevent deletion through this type.
~descriptor_base()85   ~descriptor_base()
86   {
87   }
88 };
89 
90 } // namespace posix
91 } // namespace asio
92 } // namespace boost
93 
94 #include <boost/asio/detail/pop_options.hpp>
95 
96 #endif // defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
97        //   || defined(GENERATING_DOCUMENTATION)
98 
99 #endif // BOOST_ASIO_POSIX_DESCRIPTOR_BASE_HPP
100