2 // datagram_protocol.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/local/datagram_protocol.hpp>
20 #include <boost/asio/io_context.hpp>
21 #include "../unit_test.hpp"
23 //------------------------------------------------------------------------------
25 // local_datagram_protocol_socket_compile test
26 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 // The following test checks that all public member functions on the class
28 // local::datagram_socket::socket compile and link correctly. Runtime failures
31 namespace local_datagram_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)
47 #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
48 using namespace boost::asio
;
49 namespace local
= boost::asio::local
;
50 typedef local::datagram_protocol dp
;
55 char mutable_char_buffer
[128] = "";
56 const char const_char_buffer
[128] = "";
57 socket_base::message_flags in_flags
= 0;
58 socket_base::send_buffer_size socket_option
;
59 socket_base::bytes_readable io_control_command
;
60 boost::system::error_code ec
;
62 // basic_datagram_socket constructors.
64 dp::socket
socket1(ioc
);
65 dp::socket
socket2(ioc
, dp());
66 dp::socket
socket3(ioc
, dp::endpoint(""));
67 int native_socket1
= ::socket(AF_UNIX
, SOCK_DGRAM
, 0);
68 dp::socket
socket4(ioc
, dp(), native_socket1
);
70 // basic_io_object functions.
72 #if !defined(BOOST_ASIO_NO_DEPRECATED)
73 io_context
& ioc_ref
= socket1
.get_io_context();
75 #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
77 dp::socket::executor_type ex
= socket1
.get_executor();
80 // basic_socket functions.
82 dp::socket::lowest_layer_type
& lowest_layer
= socket1
.lowest_layer();
86 socket1
.open(dp(), ec
);
88 int native_socket2
= ::socket(AF_UNIX
, SOCK_DGRAM
, 0);
89 socket1
.assign(dp(), native_socket2
);
90 int native_socket3
= ::socket(AF_UNIX
, SOCK_DGRAM
, 0);
91 socket1
.assign(dp(), native_socket3
, ec
);
93 bool is_open
= socket1
.is_open();
99 dp::socket::native_handle_type native_socket4
= socket1
.native_handle();
100 (void)native_socket4
;
105 bool at_mark1
= socket1
.at_mark();
107 bool at_mark2
= socket1
.at_mark(ec
);
110 std::size_t available1
= socket1
.available();
112 std::size_t available2
= socket1
.available(ec
);
115 socket1
.bind(dp::endpoint(""));
116 socket1
.bind(dp::endpoint(""), ec
);
118 socket1
.connect(dp::endpoint(""));
119 socket1
.connect(dp::endpoint(""), ec
);
121 socket1
.async_connect(dp::endpoint(""), connect_handler
);
123 socket1
.set_option(socket_option
);
124 socket1
.set_option(socket_option
, ec
);
126 socket1
.get_option(socket_option
);
127 socket1
.get_option(socket_option
, ec
);
129 socket1
.io_control(io_control_command
);
130 socket1
.io_control(io_control_command
, ec
);
132 dp::endpoint endpoint1
= socket1
.local_endpoint();
133 dp::endpoint endpoint2
= socket1
.local_endpoint(ec
);
135 dp::endpoint endpoint3
= socket1
.remote_endpoint();
136 dp::endpoint endpoint4
= socket1
.remote_endpoint(ec
);
138 socket1
.shutdown(socket_base::shutdown_both
);
139 socket1
.shutdown(socket_base::shutdown_both
, ec
);
141 // basic_datagram_socket functions.
143 socket1
.send(buffer(mutable_char_buffer
));
144 socket1
.send(buffer(const_char_buffer
));
145 socket1
.send(null_buffers());
146 socket1
.send(buffer(mutable_char_buffer
), in_flags
);
147 socket1
.send(buffer(const_char_buffer
), in_flags
);
148 socket1
.send(null_buffers(), in_flags
);
149 socket1
.send(buffer(mutable_char_buffer
), in_flags
, ec
);
150 socket1
.send(buffer(const_char_buffer
), in_flags
, ec
);
151 socket1
.send(null_buffers(), in_flags
, ec
);
153 socket1
.async_send(buffer(mutable_char_buffer
), send_handler
);
154 socket1
.async_send(buffer(const_char_buffer
), send_handler
);
155 socket1
.async_send(null_buffers(), send_handler
);
156 socket1
.async_send(buffer(mutable_char_buffer
), in_flags
, send_handler
);
157 socket1
.async_send(buffer(const_char_buffer
), in_flags
, send_handler
);
158 socket1
.async_send(null_buffers(), in_flags
, send_handler
);
160 socket1
.send_to(buffer(mutable_char_buffer
),
162 socket1
.send_to(buffer(const_char_buffer
),
164 socket1
.send_to(null_buffers(),
166 socket1
.send_to(buffer(mutable_char_buffer
),
167 dp::endpoint(""), in_flags
);
168 socket1
.send_to(buffer(const_char_buffer
),
169 dp::endpoint(""), in_flags
);
170 socket1
.send_to(null_buffers(),
171 dp::endpoint(""), in_flags
);
172 socket1
.send_to(buffer(mutable_char_buffer
),
173 dp::endpoint(""), in_flags
, ec
);
174 socket1
.send_to(buffer(const_char_buffer
),
175 dp::endpoint(""), in_flags
, ec
);
176 socket1
.send_to(null_buffers(),
177 dp::endpoint(""), in_flags
, ec
);
179 socket1
.async_send_to(buffer(mutable_char_buffer
),
180 dp::endpoint(""), send_handler
);
181 socket1
.async_send_to(buffer(const_char_buffer
),
182 dp::endpoint(""), send_handler
);
183 socket1
.async_send_to(null_buffers(),
184 dp::endpoint(""), send_handler
);
185 socket1
.async_send_to(buffer(mutable_char_buffer
),
186 dp::endpoint(""), in_flags
, send_handler
);
187 socket1
.async_send_to(buffer(const_char_buffer
),
188 dp::endpoint(""), in_flags
, send_handler
);
189 socket1
.async_send_to(null_buffers(),
190 dp::endpoint(""), in_flags
, send_handler
);
192 socket1
.receive(buffer(mutable_char_buffer
));
193 socket1
.receive(null_buffers());
194 socket1
.receive(buffer(mutable_char_buffer
), in_flags
);
195 socket1
.receive(null_buffers(), in_flags
);
196 socket1
.receive(buffer(mutable_char_buffer
), in_flags
, ec
);
197 socket1
.receive(null_buffers(), in_flags
, ec
);
199 socket1
.async_receive(buffer(mutable_char_buffer
), receive_handler
);
200 socket1
.async_receive(null_buffers(), receive_handler
);
201 socket1
.async_receive(buffer(mutable_char_buffer
), in_flags
,
203 socket1
.async_receive(null_buffers(), in_flags
, receive_handler
);
205 dp::endpoint endpoint
;
206 socket1
.receive_from(buffer(mutable_char_buffer
), endpoint
);
207 socket1
.receive_from(null_buffers(), endpoint
);
208 socket1
.receive_from(buffer(mutable_char_buffer
), endpoint
, in_flags
);
209 socket1
.receive_from(null_buffers(), endpoint
, in_flags
);
210 socket1
.receive_from(buffer(mutable_char_buffer
), endpoint
, in_flags
, ec
);
211 socket1
.receive_from(null_buffers(), endpoint
, in_flags
, ec
);
213 socket1
.async_receive_from(buffer(mutable_char_buffer
),
214 endpoint
, receive_handler
);
215 socket1
.async_receive_from(null_buffers(),
216 endpoint
, receive_handler
);
217 socket1
.async_receive_from(buffer(mutable_char_buffer
),
218 endpoint
, in_flags
, receive_handler
);
219 socket1
.async_receive_from(null_buffers(),
220 endpoint
, in_flags
, receive_handler
);
222 catch (std::exception
&)
225 #endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
228 } // namespace local_datagram_protocol_socket_compile
230 //------------------------------------------------------------------------------
232 BOOST_ASIO_TEST_SUITE
234 "local/datagram_protocol",
235 BOOST_ASIO_TEST_CASE(local_datagram_protocol_socket_compile::test
)