5 // Copyright (c) 2003-2022 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/local/stream_protocol.hpp>
20 #include <boost/asio/io_context.hpp>
21 #include "../unit_test.hpp"
23 //------------------------------------------------------------------------------
25 // local_stream_protocol_socket_compile test
26 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 // The following test checks that all public member functions on the class
28 // local::stream_protocol::socket compile and link correctly. Runtime failures
31 namespace local_stream_protocol_socket_compile
{
33 void connect_handler(const boost::system::error_code
&)
37 void send_handler(const boost::system::error_code
&, std::size_t)
41 void receive_handler(const boost::system::error_code
&, std::size_t)
45 void write_some_handler(const boost::system::error_code
&, std::size_t)
49 void read_some_handler(const boost::system::error_code
&, std::size_t)
55 #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
56 using namespace boost::asio
;
57 namespace local
= boost::asio::local
;
58 typedef local::stream_protocol sp
;
63 const io_context::executor_type ioc_ex
= ioc
.get_executor();
64 char mutable_char_buffer
[128] = "";
65 const char const_char_buffer
[128] = "";
66 socket_base::message_flags in_flags
= 0;
67 socket_base::keep_alive socket_option
;
68 socket_base::bytes_readable io_control_command
;
69 boost::system::error_code ec
;
71 // basic_stream_socket constructors.
73 sp::socket
socket1(ioc
);
74 sp::socket
socket2(ioc
, sp());
75 sp::socket
socket3(ioc
, sp::endpoint(""));
76 int native_socket1
= ::socket(AF_UNIX
, SOCK_STREAM
, 0);
77 sp::socket
socket4(ioc
, sp(), native_socket1
);
79 sp::socket
socket5(ioc_ex
);
80 sp::socket
socket6(ioc_ex
, sp());
81 sp::socket
socket7(ioc_ex
, sp::endpoint(""));
82 int native_socket2
= ::socket(AF_UNIX
, SOCK_STREAM
, 0);
83 sp::socket
socket8(ioc_ex
, sp(), native_socket2
);
85 // basic_io_object functions.
87 sp::socket::executor_type ex
= socket1
.get_executor();
90 // basic_socket functions.
92 sp::socket::lowest_layer_type
& lowest_layer
= socket1
.lowest_layer();
96 socket1
.open(sp(), ec
);
98 int native_socket3
= ::socket(AF_UNIX
, SOCK_STREAM
, 0);
99 socket1
.assign(sp(), native_socket3
);
100 int native_socket4
= ::socket(AF_UNIX
, SOCK_STREAM
, 0);
101 socket1
.assign(sp(), native_socket4
, ec
);
103 bool is_open
= socket1
.is_open();
109 sp::socket::native_handle_type native_socket5
= socket1
.native_handle();
110 (void)native_socket5
;
115 bool at_mark1
= socket1
.at_mark();
117 bool at_mark2
= socket1
.at_mark(ec
);
120 std::size_t available1
= socket1
.available();
122 std::size_t available2
= socket1
.available(ec
);
125 socket1
.bind(sp::endpoint(""));
126 socket1
.bind(sp::endpoint(""), ec
);
128 socket1
.connect(sp::endpoint(""));
129 socket1
.connect(sp::endpoint(""), ec
);
131 socket1
.async_connect(sp::endpoint(""), connect_handler
);
133 socket1
.set_option(socket_option
);
134 socket1
.set_option(socket_option
, ec
);
136 socket1
.get_option(socket_option
);
137 socket1
.get_option(socket_option
, ec
);
139 socket1
.io_control(io_control_command
);
140 socket1
.io_control(io_control_command
, ec
);
142 sp::endpoint endpoint1
= socket1
.local_endpoint();
144 sp::endpoint endpoint2
= socket1
.local_endpoint(ec
);
147 sp::endpoint endpoint3
= socket1
.remote_endpoint();
149 sp::endpoint endpoint4
= socket1
.remote_endpoint(ec
);
152 socket1
.shutdown(socket_base::shutdown_both
);
153 socket1
.shutdown(socket_base::shutdown_both
, ec
);
155 // basic_stream_socket functions.
157 socket1
.send(buffer(mutable_char_buffer
));
158 socket1
.send(buffer(const_char_buffer
));
159 socket1
.send(null_buffers());
160 socket1
.send(buffer(mutable_char_buffer
), in_flags
);
161 socket1
.send(buffer(const_char_buffer
), in_flags
);
162 socket1
.send(null_buffers(), in_flags
);
163 socket1
.send(buffer(mutable_char_buffer
), in_flags
, ec
);
164 socket1
.send(buffer(const_char_buffer
), in_flags
, ec
);
165 socket1
.send(null_buffers(), in_flags
, ec
);
167 socket1
.async_send(buffer(mutable_char_buffer
), send_handler
);
168 socket1
.async_send(buffer(const_char_buffer
), send_handler
);
169 socket1
.async_send(null_buffers(), send_handler
);
170 socket1
.async_send(buffer(mutable_char_buffer
), in_flags
, send_handler
);
171 socket1
.async_send(buffer(const_char_buffer
), in_flags
, send_handler
);
172 socket1
.async_send(null_buffers(), in_flags
, send_handler
);
174 socket1
.receive(buffer(mutable_char_buffer
));
175 socket1
.receive(null_buffers());
176 socket1
.receive(buffer(mutable_char_buffer
), in_flags
);
177 socket1
.receive(null_buffers(), in_flags
);
178 socket1
.receive(buffer(mutable_char_buffer
), in_flags
, ec
);
179 socket1
.receive(null_buffers(), in_flags
, ec
);
181 socket1
.async_receive(buffer(mutable_char_buffer
), receive_handler
);
182 socket1
.async_receive(null_buffers(), receive_handler
);
183 socket1
.async_receive(buffer(mutable_char_buffer
), in_flags
,
185 socket1
.async_receive(null_buffers(), in_flags
, receive_handler
);
187 socket1
.write_some(buffer(mutable_char_buffer
));
188 socket1
.write_some(buffer(const_char_buffer
));
189 socket1
.write_some(null_buffers());
190 socket1
.write_some(buffer(mutable_char_buffer
), ec
);
191 socket1
.write_some(buffer(const_char_buffer
), ec
);
192 socket1
.write_some(null_buffers(), ec
);
194 socket1
.async_write_some(buffer(mutable_char_buffer
), write_some_handler
);
195 socket1
.async_write_some(buffer(const_char_buffer
), write_some_handler
);
196 socket1
.async_write_some(null_buffers(), write_some_handler
);
198 socket1
.read_some(buffer(mutable_char_buffer
));
199 socket1
.read_some(buffer(mutable_char_buffer
), ec
);
200 socket1
.read_some(null_buffers(), ec
);
202 socket1
.async_read_some(buffer(mutable_char_buffer
), read_some_handler
);
203 socket1
.async_read_some(null_buffers(), read_some_handler
);
205 catch (std::exception
&)
208 #endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
211 } // namespace local_stream_protocol_socket_compile
213 //------------------------------------------------------------------------------
215 BOOST_ASIO_TEST_SUITE
217 "local/stream_protocol",
218 BOOST_ASIO_TEST_CASE(local_stream_protocol_socket_compile::test
)