2 // stream_descriptor.cpp
3 // ~~~~~~~~~~~~~~~~~~~~~
5 // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
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)
11 // Disable autolinking for unit tests.
12 #if !defined(BOOST_ALL_NO_LIB)
13 #define BOOST_ALL_NO_LIB 1
14 #endif // !defined(BOOST_ALL_NO_LIB)
16 // Test that header file is self-contained.
17 #include <boost/asio/posix/stream_descriptor.hpp>
19 #include <boost/asio/io_context.hpp>
20 #include "../archetypes/async_result.hpp"
21 #include "../unit_test.hpp"
23 //------------------------------------------------------------------------------
25 // posix_stream_descriptor_compile test
26 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 // The following test checks that all public member functions on the class
28 // posix::stream_descriptor compile and link correctly. Runtime failures are
31 namespace posix_stream_descriptor_compile
{
33 void wait_handler(const boost::system::error_code
&)
37 void write_some_handler(const boost::system::error_code
&, std::size_t)
41 void read_some_handler(const boost::system::error_code
&, std::size_t)
47 #if defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
48 using namespace boost::asio
;
49 namespace posix
= boost::asio::posix
;
54 char mutable_char_buffer
[128] = "";
55 const char const_char_buffer
[128] = "";
56 posix::descriptor_base::bytes_readable io_control_command
;
57 archetypes::lazy_handler lazy
;
58 boost::system::error_code ec
;
60 // basic_stream_descriptor constructors.
62 posix::stream_descriptor
descriptor1(ioc
);
63 int native_descriptor1
= -1;
64 posix::stream_descriptor
descriptor2(ioc
, native_descriptor1
);
66 #if defined(BOOST_ASIO_HAS_MOVE)
67 posix::stream_descriptor
descriptor3(std::move(descriptor2
));
68 #endif // defined(BOOST_ASIO_HAS_MOVE)
70 // basic_stream_descriptor operators.
72 #if defined(BOOST_ASIO_HAS_MOVE)
73 descriptor1
= posix::stream_descriptor(ioc
);
74 descriptor1
= std::move(descriptor2
);
75 #endif // defined(BOOST_ASIO_HAS_MOVE)
77 // basic_io_object functions.
79 #if !defined(BOOST_ASIO_NO_DEPRECATED)
80 io_context
& ioc_ref
= descriptor1
.get_io_context();
82 #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
84 posix::stream_descriptor::executor_type ex
= descriptor1
.get_executor();
87 // basic_descriptor functions.
89 posix::stream_descriptor::lowest_layer_type
& lowest_layer
90 = descriptor1
.lowest_layer();
93 const posix::stream_descriptor
& descriptor4
= descriptor1
;
94 const posix::stream_descriptor::lowest_layer_type
& lowest_layer2
95 = descriptor4
.lowest_layer();
98 int native_descriptor2
= -1;
99 descriptor1
.assign(native_descriptor2
);
101 bool is_open
= descriptor1
.is_open();
105 descriptor1
.close(ec
);
107 posix::stream_descriptor::native_handle_type native_descriptor3
108 = descriptor1
.native_handle();
109 (void)native_descriptor3
;
111 posix::stream_descriptor::native_handle_type native_descriptor4
112 = descriptor1
.release();
113 (void)native_descriptor4
;
115 descriptor1
.cancel();
116 descriptor1
.cancel(ec
);
118 descriptor1
.io_control(io_control_command
);
119 descriptor1
.io_control(io_control_command
, ec
);
121 bool non_blocking1
= descriptor1
.non_blocking();
123 descriptor1
.non_blocking(true);
124 descriptor1
.non_blocking(false, ec
);
126 bool non_blocking2
= descriptor1
.native_non_blocking();
128 descriptor1
.native_non_blocking(true);
129 descriptor1
.native_non_blocking(false, ec
);
131 descriptor1
.wait(posix::descriptor_base::wait_read
);
132 descriptor1
.wait(posix::descriptor_base::wait_write
, ec
);
134 descriptor1
.async_wait(posix::descriptor_base::wait_read
, &wait_handler
);
135 int i1
= descriptor1
.async_wait(posix::descriptor_base::wait_write
, lazy
);
138 // basic_stream_descriptor functions.
140 descriptor1
.write_some(buffer(mutable_char_buffer
));
141 descriptor1
.write_some(buffer(const_char_buffer
));
142 descriptor1
.write_some(null_buffers());
143 descriptor1
.write_some(buffer(mutable_char_buffer
), ec
);
144 descriptor1
.write_some(buffer(const_char_buffer
), ec
);
145 descriptor1
.write_some(null_buffers(), ec
);
147 descriptor1
.async_write_some(buffer(mutable_char_buffer
),
149 descriptor1
.async_write_some(buffer(const_char_buffer
),
151 descriptor1
.async_write_some(null_buffers(),
153 int i2
= descriptor1
.async_write_some(buffer(mutable_char_buffer
), lazy
);
155 int i3
= descriptor1
.async_write_some(buffer(const_char_buffer
), lazy
);
157 int i4
= descriptor1
.async_write_some(null_buffers(), lazy
);
160 descriptor1
.read_some(buffer(mutable_char_buffer
));
161 descriptor1
.read_some(buffer(mutable_char_buffer
), ec
);
162 descriptor1
.read_some(null_buffers(), ec
);
164 descriptor1
.async_read_some(buffer(mutable_char_buffer
), read_some_handler
);
165 descriptor1
.async_read_some(null_buffers(), read_some_handler
);
166 int i5
= descriptor1
.async_read_some(buffer(mutable_char_buffer
), lazy
);
168 int i6
= descriptor1
.async_read_some(null_buffers(), lazy
);
171 catch (std::exception
&)
174 #endif // defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
177 } // namespace posix_stream_descriptor_compile
179 //------------------------------------------------------------------------------
181 BOOST_ASIO_TEST_SUITE
183 "posix/stream_descriptor",
184 BOOST_ASIO_TEST_CASE(posix_stream_descriptor_compile::test
)