]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // |
2 | // udp.cpp | |
3 | // ~~~~~~~ | |
4 | // | |
11fdf7f2 | 5 | // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
7c673cae FG |
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 | // 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) | |
15 | ||
16 | // Test that header file is self-contained. | |
17 | #include <boost/asio/ip/udp.hpp> | |
18 | ||
19 | #include <cstring> | |
b32b8144 | 20 | #include <boost/asio/io_context.hpp> |
7c673cae | 21 | #include "../unit_test.hpp" |
7c673cae | 22 | #include "../archetypes/async_result.hpp" |
b32b8144 FG |
23 | #include "../archetypes/deprecated_async_result.hpp" |
24 | #include "../archetypes/gettable_socket_option.hpp" | |
7c673cae FG |
25 | #include "../archetypes/io_control_command.hpp" |
26 | #include "../archetypes/settable_socket_option.hpp" | |
27 | ||
28 | #if defined(BOOST_ASIO_HAS_BOOST_BIND) | |
29 | # include <boost/bind.hpp> | |
30 | #else // defined(BOOST_ASIO_HAS_BOOST_BIND) | |
31 | # include <functional> | |
32 | #endif // defined(BOOST_ASIO_HAS_BOOST_BIND) | |
33 | ||
34 | //------------------------------------------------------------------------------ | |
35 | ||
36 | // ip_udp_socket_compile test | |
37 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
38 | // The following test checks that all public member functions on the class | |
39 | // ip::udp::socket compile and link correctly. Runtime failures are ignored. | |
40 | ||
41 | namespace ip_udp_socket_compile { | |
42 | ||
b32b8144 | 43 | struct connect_handler |
7c673cae | 44 | { |
b32b8144 FG |
45 | connect_handler() {} |
46 | void operator()(const boost::system::error_code&) {} | |
47 | #if defined(BOOST_ASIO_HAS_MOVE) | |
48 | connect_handler(connect_handler&&) {} | |
49 | private: | |
50 | connect_handler(const connect_handler&); | |
51 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
52 | }; | |
7c673cae | 53 | |
b32b8144 | 54 | struct wait_handler |
7c673cae | 55 | { |
b32b8144 FG |
56 | wait_handler() {} |
57 | void operator()(const boost::system::error_code&) {} | |
58 | #if defined(BOOST_ASIO_HAS_MOVE) | |
59 | wait_handler(wait_handler&&) {} | |
60 | private: | |
61 | wait_handler(const wait_handler&); | |
62 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
63 | }; | |
7c673cae | 64 | |
b32b8144 | 65 | struct send_handler |
7c673cae | 66 | { |
b32b8144 FG |
67 | send_handler() {} |
68 | void operator()(const boost::system::error_code&, std::size_t) {} | |
69 | #if defined(BOOST_ASIO_HAS_MOVE) | |
70 | send_handler(send_handler&&) {} | |
71 | private: | |
72 | send_handler(const send_handler&); | |
73 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
74 | }; | |
75 | ||
76 | struct receive_handler | |
77 | { | |
78 | receive_handler() {} | |
79 | void operator()(const boost::system::error_code&, std::size_t) {} | |
80 | #if defined(BOOST_ASIO_HAS_MOVE) | |
81 | receive_handler(receive_handler&&) {} | |
82 | private: | |
83 | receive_handler(const receive_handler&); | |
84 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
85 | }; | |
7c673cae FG |
86 | |
87 | void test() | |
88 | { | |
89 | using namespace boost::asio; | |
90 | namespace ip = boost::asio::ip; | |
91 | ||
92 | try | |
93 | { | |
b32b8144 | 94 | io_context ioc; |
7c673cae FG |
95 | char mutable_char_buffer[128] = ""; |
96 | const char const_char_buffer[128] = ""; | |
97 | socket_base::message_flags in_flags = 0; | |
98 | archetypes::settable_socket_option<void> settable_socket_option1; | |
99 | archetypes::settable_socket_option<int> settable_socket_option2; | |
100 | archetypes::settable_socket_option<double> settable_socket_option3; | |
101 | archetypes::gettable_socket_option<void> gettable_socket_option1; | |
102 | archetypes::gettable_socket_option<int> gettable_socket_option2; | |
103 | archetypes::gettable_socket_option<double> gettable_socket_option3; | |
104 | archetypes::io_control_command io_control_command; | |
105 | archetypes::lazy_handler lazy; | |
b32b8144 FG |
106 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
107 | archetypes::deprecated_lazy_handler dlazy; | |
108 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae FG |
109 | boost::system::error_code ec; |
110 | ||
111 | // basic_datagram_socket constructors. | |
112 | ||
b32b8144 FG |
113 | ip::udp::socket socket1(ioc); |
114 | ip::udp::socket socket2(ioc, ip::udp::v4()); | |
115 | ip::udp::socket socket3(ioc, ip::udp::v6()); | |
116 | ip::udp::socket socket4(ioc, ip::udp::endpoint(ip::udp::v4(), 0)); | |
117 | ip::udp::socket socket5(ioc, ip::udp::endpoint(ip::udp::v6(), 0)); | |
7c673cae FG |
118 | #if !defined(BOOST_ASIO_WINDOWS_RUNTIME) |
119 | ip::udp::socket::native_handle_type native_socket1 | |
120 | = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); | |
b32b8144 | 121 | ip::udp::socket socket6(ioc, ip::udp::v4(), native_socket1); |
7c673cae FG |
122 | #endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME) |
123 | ||
124 | #if defined(BOOST_ASIO_HAS_MOVE) | |
125 | ip::udp::socket socket7(std::move(socket6)); | |
126 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
127 | ||
128 | // basic_datagram_socket operators. | |
129 | ||
130 | #if defined(BOOST_ASIO_HAS_MOVE) | |
b32b8144 | 131 | socket1 = ip::udp::socket(ioc); |
7c673cae FG |
132 | socket1 = std::move(socket2); |
133 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
134 | ||
135 | // basic_io_object functions. | |
136 | ||
b32b8144 FG |
137 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
138 | io_context& ioc_ref = socket1.get_io_context(); | |
139 | (void)ioc_ref; | |
140 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
141 | ||
142 | ip::udp::socket::executor_type ex = socket1.get_executor(); | |
143 | (void)ex; | |
7c673cae FG |
144 | |
145 | // basic_socket functions. | |
146 | ||
147 | ip::udp::socket::lowest_layer_type& lowest_layer = socket1.lowest_layer(); | |
148 | (void)lowest_layer; | |
149 | ||
150 | const ip::udp::socket& socket8 = socket1; | |
151 | const ip::udp::socket::lowest_layer_type& lowest_layer2 | |
152 | = socket8.lowest_layer(); | |
153 | (void)lowest_layer2; | |
154 | ||
155 | socket1.open(ip::udp::v4()); | |
156 | socket1.open(ip::udp::v6()); | |
157 | socket1.open(ip::udp::v4(), ec); | |
158 | socket1.open(ip::udp::v6(), ec); | |
159 | ||
160 | #if !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
161 | ip::udp::socket::native_handle_type native_socket2 | |
162 | = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); | |
163 | socket1.assign(ip::udp::v4(), native_socket2); | |
164 | ip::udp::socket::native_handle_type native_socket3 | |
165 | = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); | |
166 | socket1.assign(ip::udp::v4(), native_socket3, ec); | |
167 | #endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME) | |
168 | ||
169 | bool is_open = socket1.is_open(); | |
170 | (void)is_open; | |
171 | ||
172 | socket1.close(); | |
173 | socket1.close(ec); | |
174 | ||
b32b8144 FG |
175 | socket1.release(); |
176 | socket1.release(ec); | |
7c673cae | 177 | |
b32b8144 | 178 | ip::udp::socket::native_handle_type native_socket4 |
7c673cae | 179 | = socket1.native_handle(); |
b32b8144 | 180 | (void)native_socket4; |
7c673cae FG |
181 | |
182 | socket1.cancel(); | |
183 | socket1.cancel(ec); | |
184 | ||
185 | bool at_mark1 = socket1.at_mark(); | |
186 | (void)at_mark1; | |
187 | bool at_mark2 = socket1.at_mark(ec); | |
188 | (void)at_mark2; | |
189 | ||
190 | std::size_t available1 = socket1.available(); | |
191 | (void)available1; | |
192 | std::size_t available2 = socket1.available(ec); | |
193 | (void)available2; | |
194 | ||
195 | socket1.bind(ip::udp::endpoint(ip::udp::v4(), 0)); | |
196 | socket1.bind(ip::udp::endpoint(ip::udp::v6(), 0)); | |
197 | socket1.bind(ip::udp::endpoint(ip::udp::v4(), 0), ec); | |
198 | socket1.bind(ip::udp::endpoint(ip::udp::v6(), 0), ec); | |
199 | ||
200 | socket1.connect(ip::udp::endpoint(ip::udp::v4(), 0)); | |
201 | socket1.connect(ip::udp::endpoint(ip::udp::v6(), 0)); | |
202 | socket1.connect(ip::udp::endpoint(ip::udp::v4(), 0), ec); | |
203 | socket1.connect(ip::udp::endpoint(ip::udp::v6(), 0), ec); | |
204 | ||
205 | socket1.async_connect(ip::udp::endpoint(ip::udp::v4(), 0), | |
b32b8144 | 206 | connect_handler()); |
7c673cae | 207 | socket1.async_connect(ip::udp::endpoint(ip::udp::v6(), 0), |
b32b8144 | 208 | connect_handler()); |
7c673cae FG |
209 | int i1 = socket1.async_connect(ip::udp::endpoint(ip::udp::v4(), 0), lazy); |
210 | (void)i1; | |
211 | int i2 = socket1.async_connect(ip::udp::endpoint(ip::udp::v6(), 0), lazy); | |
212 | (void)i2; | |
b32b8144 FG |
213 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
214 | double d1 = socket1.async_connect( | |
215 | ip::udp::endpoint(ip::udp::v4(), 0), dlazy); | |
216 | (void)d1; | |
217 | double d2 = socket1.async_connect( | |
218 | ip::udp::endpoint(ip::udp::v6(), 0), dlazy); | |
219 | (void)d2; | |
220 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae FG |
221 | |
222 | socket1.set_option(settable_socket_option1); | |
223 | socket1.set_option(settable_socket_option1, ec); | |
224 | socket1.set_option(settable_socket_option2); | |
225 | socket1.set_option(settable_socket_option2, ec); | |
226 | socket1.set_option(settable_socket_option3); | |
227 | socket1.set_option(settable_socket_option3, ec); | |
228 | ||
229 | socket1.get_option(gettable_socket_option1); | |
230 | socket1.get_option(gettable_socket_option1, ec); | |
231 | socket1.get_option(gettable_socket_option2); | |
232 | socket1.get_option(gettable_socket_option2, ec); | |
233 | socket1.get_option(gettable_socket_option3); | |
234 | socket1.get_option(gettable_socket_option3, ec); | |
235 | ||
236 | socket1.io_control(io_control_command); | |
237 | socket1.io_control(io_control_command, ec); | |
238 | ||
239 | bool non_blocking1 = socket1.non_blocking(); | |
240 | (void)non_blocking1; | |
241 | socket1.non_blocking(true); | |
242 | socket1.non_blocking(false, ec); | |
243 | ||
244 | bool non_blocking2 = socket1.native_non_blocking(); | |
245 | (void)non_blocking2; | |
246 | socket1.native_non_blocking(true); | |
247 | socket1.native_non_blocking(false, ec); | |
248 | ||
249 | ip::udp::endpoint endpoint1 = socket1.local_endpoint(); | |
250 | ip::udp::endpoint endpoint2 = socket1.local_endpoint(ec); | |
251 | ||
252 | ip::udp::endpoint endpoint3 = socket1.remote_endpoint(); | |
253 | ip::udp::endpoint endpoint4 = socket1.remote_endpoint(ec); | |
254 | ||
255 | socket1.shutdown(socket_base::shutdown_both); | |
256 | socket1.shutdown(socket_base::shutdown_both, ec); | |
257 | ||
b32b8144 FG |
258 | socket1.wait(socket_base::wait_read); |
259 | socket1.wait(socket_base::wait_write, ec); | |
260 | ||
261 | socket1.async_wait(socket_base::wait_read, wait_handler()); | |
262 | int i3 = socket1.async_wait(socket_base::wait_write, lazy); | |
263 | (void)i3; | |
264 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
265 | double d3 = socket1.async_wait(socket_base::wait_write, dlazy); | |
266 | (void)d3; | |
267 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
268 | ||
7c673cae FG |
269 | // basic_datagram_socket functions. |
270 | ||
271 | socket1.send(buffer(mutable_char_buffer)); | |
272 | socket1.send(buffer(const_char_buffer)); | |
273 | socket1.send(null_buffers()); | |
274 | socket1.send(buffer(mutable_char_buffer), in_flags); | |
275 | socket1.send(buffer(const_char_buffer), in_flags); | |
276 | socket1.send(null_buffers(), in_flags); | |
277 | socket1.send(buffer(mutable_char_buffer), in_flags, ec); | |
278 | socket1.send(buffer(const_char_buffer), in_flags, ec); | |
279 | socket1.send(null_buffers(), in_flags, ec); | |
280 | ||
b32b8144 FG |
281 | socket1.async_send(buffer(mutable_char_buffer), send_handler()); |
282 | socket1.async_send(buffer(const_char_buffer), send_handler()); | |
283 | socket1.async_send(null_buffers(), send_handler()); | |
284 | socket1.async_send(buffer(mutable_char_buffer), in_flags, send_handler()); | |
285 | socket1.async_send(buffer(const_char_buffer), in_flags, send_handler()); | |
286 | socket1.async_send(null_buffers(), in_flags, send_handler()); | |
287 | int i4 = socket1.async_send(buffer(mutable_char_buffer), lazy); | |
7c673cae | 288 | (void)i4; |
b32b8144 | 289 | int i5 = socket1.async_send(buffer(const_char_buffer), lazy); |
7c673cae | 290 | (void)i5; |
b32b8144 | 291 | int i6 = socket1.async_send(null_buffers(), lazy); |
7c673cae | 292 | (void)i6; |
b32b8144 | 293 | int i7 = socket1.async_send(buffer(mutable_char_buffer), in_flags, lazy); |
7c673cae | 294 | (void)i7; |
b32b8144 | 295 | int i8 = socket1.async_send(buffer(const_char_buffer), in_flags, lazy); |
7c673cae | 296 | (void)i8; |
b32b8144 FG |
297 | int i9 = socket1.async_send(null_buffers(), in_flags, lazy); |
298 | (void)i9; | |
299 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
300 | double d4 = socket1.async_send(buffer(mutable_char_buffer), dlazy); | |
301 | (void)d4; | |
302 | double d5 = socket1.async_send(buffer(const_char_buffer), dlazy); | |
303 | (void)d5; | |
304 | double d6 = socket1.async_send(null_buffers(), dlazy); | |
305 | (void)d6; | |
306 | double d7 = socket1.async_send( | |
307 | buffer(mutable_char_buffer), in_flags, dlazy); | |
308 | (void)d7; | |
309 | double d8 = socket1.async_send(buffer(const_char_buffer), in_flags, dlazy); | |
310 | (void)d8; | |
311 | double d9 = socket1.async_send(null_buffers(), in_flags, dlazy); | |
312 | (void)d9; | |
313 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae FG |
314 | |
315 | socket1.send_to(buffer(mutable_char_buffer), | |
316 | ip::udp::endpoint(ip::udp::v4(), 0)); | |
317 | socket1.send_to(buffer(mutable_char_buffer), | |
318 | ip::udp::endpoint(ip::udp::v6(), 0)); | |
319 | socket1.send_to(buffer(const_char_buffer), | |
320 | ip::udp::endpoint(ip::udp::v4(), 0)); | |
321 | socket1.send_to(buffer(const_char_buffer), | |
322 | ip::udp::endpoint(ip::udp::v6(), 0)); | |
323 | socket1.send_to(null_buffers(), | |
324 | ip::udp::endpoint(ip::udp::v4(), 0)); | |
325 | socket1.send_to(null_buffers(), | |
326 | ip::udp::endpoint(ip::udp::v6(), 0)); | |
327 | socket1.send_to(buffer(mutable_char_buffer), | |
328 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags); | |
329 | socket1.send_to(buffer(mutable_char_buffer), | |
330 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags); | |
331 | socket1.send_to(buffer(const_char_buffer), | |
332 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags); | |
333 | socket1.send_to(buffer(const_char_buffer), | |
334 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags); | |
335 | socket1.send_to(null_buffers(), | |
336 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags); | |
337 | socket1.send_to(null_buffers(), | |
338 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags); | |
339 | socket1.send_to(buffer(mutable_char_buffer), | |
340 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, ec); | |
341 | socket1.send_to(buffer(mutable_char_buffer), | |
342 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, ec); | |
343 | socket1.send_to(buffer(const_char_buffer), | |
344 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, ec); | |
345 | socket1.send_to(buffer(const_char_buffer), | |
346 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, ec); | |
347 | socket1.send_to(null_buffers(), | |
348 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, ec); | |
349 | socket1.send_to(null_buffers(), | |
350 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, ec); | |
351 | ||
352 | socket1.async_send_to(buffer(mutable_char_buffer), | |
b32b8144 | 353 | ip::udp::endpoint(ip::udp::v4(), 0), send_handler()); |
7c673cae | 354 | socket1.async_send_to(buffer(mutable_char_buffer), |
b32b8144 | 355 | ip::udp::endpoint(ip::udp::v6(), 0), send_handler()); |
7c673cae | 356 | socket1.async_send_to(buffer(const_char_buffer), |
b32b8144 | 357 | ip::udp::endpoint(ip::udp::v4(), 0), send_handler()); |
7c673cae | 358 | socket1.async_send_to(buffer(const_char_buffer), |
b32b8144 | 359 | ip::udp::endpoint(ip::udp::v6(), 0), send_handler()); |
7c673cae | 360 | socket1.async_send_to(null_buffers(), |
b32b8144 | 361 | ip::udp::endpoint(ip::udp::v4(), 0), send_handler()); |
7c673cae | 362 | socket1.async_send_to(null_buffers(), |
b32b8144 | 363 | ip::udp::endpoint(ip::udp::v6(), 0), send_handler()); |
7c673cae | 364 | socket1.async_send_to(buffer(mutable_char_buffer), |
b32b8144 | 365 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, send_handler()); |
7c673cae | 366 | socket1.async_send_to(buffer(mutable_char_buffer), |
b32b8144 | 367 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, send_handler()); |
7c673cae | 368 | socket1.async_send_to(buffer(const_char_buffer), |
b32b8144 | 369 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, send_handler()); |
7c673cae | 370 | socket1.async_send_to(buffer(const_char_buffer), |
b32b8144 | 371 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, send_handler()); |
7c673cae | 372 | socket1.async_send_to(null_buffers(), |
b32b8144 | 373 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, send_handler()); |
7c673cae | 374 | socket1.async_send_to(null_buffers(), |
b32b8144 | 375 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, send_handler()); |
7c673cae | 376 | int i10 = socket1.async_send_to(buffer(mutable_char_buffer), |
7c673cae | 377 | ip::udp::endpoint(ip::udp::v4(), 0), lazy); |
b32b8144 FG |
378 | (void)i10; |
379 | int i11 = socket1.async_send_to(buffer(mutable_char_buffer), | |
380 | ip::udp::endpoint(ip::udp::v6(), 0), lazy); | |
7c673cae FG |
381 | (void)i11; |
382 | int i12 = socket1.async_send_to(buffer(const_char_buffer), | |
7c673cae | 383 | ip::udp::endpoint(ip::udp::v4(), 0), lazy); |
b32b8144 FG |
384 | (void)i12; |
385 | int i13 = socket1.async_send_to(buffer(const_char_buffer), | |
386 | ip::udp::endpoint(ip::udp::v6(), 0), lazy); | |
7c673cae FG |
387 | (void)i13; |
388 | int i14 = socket1.async_send_to(null_buffers(), | |
b32b8144 | 389 | ip::udp::endpoint(ip::udp::v4(), 0), lazy); |
7c673cae | 390 | (void)i14; |
b32b8144 FG |
391 | int i15 = socket1.async_send_to(null_buffers(), |
392 | ip::udp::endpoint(ip::udp::v6(), 0), lazy); | |
7c673cae FG |
393 | (void)i15; |
394 | int i16 = socket1.async_send_to(buffer(mutable_char_buffer), | |
7c673cae | 395 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, lazy); |
b32b8144 FG |
396 | (void)i16; |
397 | int i17 = socket1.async_send_to(buffer(mutable_char_buffer), | |
398 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, lazy); | |
7c673cae FG |
399 | (void)i17; |
400 | int i18 = socket1.async_send_to(buffer(const_char_buffer), | |
7c673cae | 401 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, lazy); |
b32b8144 FG |
402 | (void)i18; |
403 | int i19 = socket1.async_send_to(buffer(const_char_buffer), | |
404 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, lazy); | |
7c673cae FG |
405 | (void)i19; |
406 | int i20 = socket1.async_send_to(null_buffers(), | |
b32b8144 | 407 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, lazy); |
7c673cae | 408 | (void)i20; |
b32b8144 FG |
409 | int i21 = socket1.async_send_to(null_buffers(), |
410 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, lazy); | |
411 | (void)i21; | |
412 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
413 | double d10 = socket1.async_send_to(buffer(mutable_char_buffer), | |
414 | ip::udp::endpoint(ip::udp::v4(), 0), dlazy); | |
415 | (void)d10; | |
416 | double d11 = socket1.async_send_to(buffer(mutable_char_buffer), | |
417 | ip::udp::endpoint(ip::udp::v6(), 0), dlazy); | |
418 | (void)d11; | |
419 | double d12 = socket1.async_send_to(buffer(const_char_buffer), | |
420 | ip::udp::endpoint(ip::udp::v4(), 0), dlazy); | |
421 | (void)d12; | |
422 | double d13 = socket1.async_send_to(buffer(const_char_buffer), | |
423 | ip::udp::endpoint(ip::udp::v6(), 0), dlazy); | |
424 | (void)d13; | |
425 | double d14 = socket1.async_send_to(null_buffers(), | |
426 | ip::udp::endpoint(ip::udp::v4(), 0), dlazy); | |
427 | (void)d14; | |
428 | double d15 = socket1.async_send_to(null_buffers(), | |
429 | ip::udp::endpoint(ip::udp::v6(), 0), dlazy); | |
430 | (void)d15; | |
431 | double d16 = socket1.async_send_to(buffer(mutable_char_buffer), | |
432 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, dlazy); | |
433 | (void)d16; | |
434 | double d17 = socket1.async_send_to(buffer(mutable_char_buffer), | |
435 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, dlazy); | |
436 | (void)d17; | |
437 | double d18 = socket1.async_send_to(buffer(const_char_buffer), | |
438 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, dlazy); | |
439 | (void)d18; | |
440 | double d19 = socket1.async_send_to(buffer(const_char_buffer), | |
441 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, dlazy); | |
442 | (void)d19; | |
443 | double d20 = socket1.async_send_to(null_buffers(), | |
444 | ip::udp::endpoint(ip::udp::v4(), 0), in_flags, dlazy); | |
445 | (void)d20; | |
446 | double d21 = socket1.async_send_to(null_buffers(), | |
447 | ip::udp::endpoint(ip::udp::v6(), 0), in_flags, dlazy); | |
448 | (void)d21; | |
449 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae FG |
450 | |
451 | socket1.receive(buffer(mutable_char_buffer)); | |
452 | socket1.receive(null_buffers()); | |
453 | socket1.receive(buffer(mutable_char_buffer), in_flags); | |
454 | socket1.receive(null_buffers(), in_flags); | |
455 | socket1.receive(buffer(mutable_char_buffer), in_flags, ec); | |
456 | socket1.receive(null_buffers(), in_flags, ec); | |
457 | ||
b32b8144 FG |
458 | socket1.async_receive(buffer(mutable_char_buffer), receive_handler()); |
459 | socket1.async_receive(null_buffers(), receive_handler()); | |
7c673cae | 460 | socket1.async_receive(buffer(mutable_char_buffer), in_flags, |
b32b8144 FG |
461 | receive_handler()); |
462 | socket1.async_receive(null_buffers(), in_flags, receive_handler()); | |
463 | int i22 = socket1.async_receive(buffer(mutable_char_buffer), lazy); | |
7c673cae | 464 | (void)i22; |
b32b8144 | 465 | int i23 = socket1.async_receive(null_buffers(), lazy); |
7c673cae | 466 | (void)i23; |
b32b8144 FG |
467 | int i24 = socket1.async_receive(buffer(mutable_char_buffer), |
468 | in_flags, lazy); | |
7c673cae | 469 | (void)i24; |
b32b8144 FG |
470 | int i25 = socket1.async_receive(null_buffers(), in_flags, lazy); |
471 | (void)i25; | |
472 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
473 | double d22 = socket1.async_receive(buffer(mutable_char_buffer), dlazy); | |
474 | (void)d22; | |
475 | double d23 = socket1.async_receive(null_buffers(), dlazy); | |
476 | (void)d23; | |
477 | double d24 = socket1.async_receive(buffer(mutable_char_buffer), | |
478 | in_flags, dlazy); | |
479 | (void)d24; | |
480 | double d25 = socket1.async_receive(null_buffers(), in_flags, dlazy); | |
481 | (void)d25; | |
482 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae FG |
483 | |
484 | ip::udp::endpoint endpoint; | |
485 | socket1.receive_from(buffer(mutable_char_buffer), endpoint); | |
486 | socket1.receive_from(null_buffers(), endpoint); | |
487 | socket1.receive_from(buffer(mutable_char_buffer), endpoint, in_flags); | |
488 | socket1.receive_from(null_buffers(), endpoint, in_flags); | |
489 | socket1.receive_from(buffer(mutable_char_buffer), endpoint, in_flags, ec); | |
490 | socket1.receive_from(null_buffers(), endpoint, in_flags, ec); | |
491 | ||
492 | socket1.async_receive_from(buffer(mutable_char_buffer), | |
b32b8144 | 493 | endpoint, receive_handler()); |
7c673cae | 494 | socket1.async_receive_from(null_buffers(), |
b32b8144 | 495 | endpoint, receive_handler()); |
7c673cae | 496 | socket1.async_receive_from(buffer(mutable_char_buffer), |
b32b8144 | 497 | endpoint, in_flags, receive_handler()); |
7c673cae | 498 | socket1.async_receive_from(null_buffers(), |
b32b8144 FG |
499 | endpoint, in_flags, receive_handler()); |
500 | int i26 = socket1.async_receive_from(buffer(mutable_char_buffer), | |
7c673cae FG |
501 | endpoint, lazy); |
502 | (void)i26; | |
b32b8144 FG |
503 | int i27 = socket1.async_receive_from(null_buffers(), |
504 | endpoint, lazy); | |
7c673cae | 505 | (void)i27; |
b32b8144 | 506 | int i28 = socket1.async_receive_from(buffer(mutable_char_buffer), |
7c673cae FG |
507 | endpoint, in_flags, lazy); |
508 | (void)i28; | |
b32b8144 FG |
509 | int i29 = socket1.async_receive_from(null_buffers(), |
510 | endpoint, in_flags, lazy); | |
511 | (void)i29; | |
512 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
513 | double d26 = socket1.async_receive_from(buffer(mutable_char_buffer), | |
514 | endpoint, dlazy); | |
515 | (void)d26; | |
516 | double d27 = socket1.async_receive_from(null_buffers(), | |
517 | endpoint, dlazy); | |
518 | (void)d27; | |
519 | double d28 = socket1.async_receive_from(buffer(mutable_char_buffer), | |
520 | endpoint, in_flags, dlazy); | |
521 | (void)d28; | |
522 | double d29 = socket1.async_receive_from(null_buffers(), | |
523 | endpoint, in_flags, dlazy); | |
524 | (void)d29; | |
525 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae FG |
526 | } |
527 | catch (std::exception&) | |
528 | { | |
529 | } | |
530 | } | |
531 | ||
532 | } // namespace ip_udp_socket_compile | |
533 | ||
534 | //------------------------------------------------------------------------------ | |
535 | ||
536 | // ip_udp_socket_runtime test | |
537 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
538 | // The following test checks the runtime operation of the ip::udp::socket class. | |
539 | ||
540 | namespace ip_udp_socket_runtime { | |
541 | ||
542 | void handle_send(size_t expected_bytes_sent, | |
543 | const boost::system::error_code& err, size_t bytes_sent) | |
544 | { | |
545 | BOOST_ASIO_CHECK(!err); | |
546 | BOOST_ASIO_CHECK(expected_bytes_sent == bytes_sent); | |
547 | } | |
548 | ||
549 | void handle_recv(size_t expected_bytes_recvd, | |
550 | const boost::system::error_code& err, size_t bytes_recvd) | |
551 | { | |
552 | BOOST_ASIO_CHECK(!err); | |
553 | BOOST_ASIO_CHECK(expected_bytes_recvd == bytes_recvd); | |
554 | } | |
555 | ||
556 | void test() | |
557 | { | |
558 | using namespace std; // For memcmp and memset. | |
559 | using namespace boost::asio; | |
560 | namespace ip = boost::asio::ip; | |
561 | ||
562 | #if defined(BOOST_ASIO_HAS_BOOST_BIND) | |
563 | namespace bindns = boost; | |
564 | #else // defined(BOOST_ASIO_HAS_BOOST_BIND) | |
565 | namespace bindns = std; | |
566 | using std::placeholders::_1; | |
567 | using std::placeholders::_2; | |
568 | #endif // defined(BOOST_ASIO_HAS_BOOST_BIND) | |
569 | ||
b32b8144 | 570 | io_context ioc; |
7c673cae | 571 | |
b32b8144 | 572 | ip::udp::socket s1(ioc, ip::udp::endpoint(ip::udp::v4(), 0)); |
7c673cae FG |
573 | ip::udp::endpoint target_endpoint = s1.local_endpoint(); |
574 | target_endpoint.address(ip::address_v4::loopback()); | |
575 | ||
b32b8144 | 576 | ip::udp::socket s2(ioc); |
7c673cae FG |
577 | s2.open(ip::udp::v4()); |
578 | s2.bind(ip::udp::endpoint(ip::udp::v4(), 0)); | |
579 | char send_msg[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; | |
580 | s2.send_to(buffer(send_msg, sizeof(send_msg)), target_endpoint); | |
581 | ||
582 | char recv_msg[sizeof(send_msg)]; | |
583 | ip::udp::endpoint sender_endpoint; | |
584 | size_t bytes_recvd = s1.receive_from(buffer(recv_msg, sizeof(recv_msg)), | |
585 | sender_endpoint); | |
586 | ||
587 | BOOST_ASIO_CHECK(bytes_recvd == sizeof(send_msg)); | |
588 | BOOST_ASIO_CHECK(memcmp(send_msg, recv_msg, sizeof(send_msg)) == 0); | |
589 | ||
590 | memset(recv_msg, 0, sizeof(recv_msg)); | |
591 | ||
592 | target_endpoint = sender_endpoint; | |
593 | s1.async_send_to(buffer(send_msg, sizeof(send_msg)), target_endpoint, | |
594 | bindns::bind(handle_send, sizeof(send_msg), _1, _2)); | |
595 | s2.async_receive_from(buffer(recv_msg, sizeof(recv_msg)), sender_endpoint, | |
596 | bindns::bind(handle_recv, sizeof(recv_msg), _1, _2)); | |
597 | ||
b32b8144 | 598 | ioc.run(); |
7c673cae FG |
599 | |
600 | BOOST_ASIO_CHECK(memcmp(send_msg, recv_msg, sizeof(send_msg)) == 0); | |
601 | } | |
602 | ||
603 | } // namespace ip_udp_socket_runtime | |
604 | ||
605 | //------------------------------------------------------------------------------ | |
606 | ||
607 | // ip_udp_resolver_compile test | |
608 | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
609 | // The following test checks that all public member functions on the class | |
610 | // ip::udp::resolver compile and link correctly. Runtime failures are ignored. | |
611 | ||
612 | namespace ip_udp_resolver_compile { | |
613 | ||
b32b8144 | 614 | struct resolve_handler |
7c673cae | 615 | { |
b32b8144 FG |
616 | resolve_handler() {} |
617 | void operator()(const boost::system::error_code&, | |
618 | boost::asio::ip::udp::resolver::results_type) {} | |
619 | #if defined(BOOST_ASIO_HAS_MOVE) | |
620 | resolve_handler(resolve_handler&&) {} | |
621 | private: | |
622 | resolve_handler(const resolve_handler&); | |
623 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
624 | }; | |
7c673cae FG |
625 | |
626 | void test() | |
627 | { | |
628 | using namespace boost::asio; | |
629 | namespace ip = boost::asio::ip; | |
630 | ||
631 | try | |
632 | { | |
b32b8144 | 633 | io_context ioc; |
7c673cae | 634 | archetypes::lazy_handler lazy; |
b32b8144 FG |
635 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
636 | archetypes::deprecated_lazy_handler dlazy; | |
637 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae | 638 | boost::system::error_code ec; |
b32b8144 | 639 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
7c673cae | 640 | ip::udp::resolver::query q(ip::udp::v4(), "localhost", "0"); |
b32b8144 | 641 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) |
7c673cae FG |
642 | ip::udp::endpoint e(ip::address_v4::loopback(), 0); |
643 | ||
644 | // basic_resolver constructors. | |
645 | ||
b32b8144 FG |
646 | ip::udp::resolver resolver(ioc); |
647 | ||
648 | #if defined(BOOST_ASIO_HAS_MOVE) | |
649 | ip::udp::resolver resolver2(std::move(resolver)); | |
650 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
651 | ||
652 | // basic_resolver operators. | |
653 | ||
654 | #if defined(BOOST_ASIO_HAS_MOVE) | |
655 | resolver = ip::udp::resolver(ioc); | |
656 | resolver = std::move(resolver2); | |
657 | #endif // defined(BOOST_ASIO_HAS_MOVE) | |
7c673cae FG |
658 | |
659 | // basic_io_object functions. | |
660 | ||
b32b8144 FG |
661 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
662 | io_context& ioc_ref = resolver.get_io_context(); | |
663 | (void)ioc_ref; | |
664 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
665 | ||
666 | ip::udp::resolver::executor_type ex = resolver.get_executor(); | |
667 | (void)ex; | |
7c673cae FG |
668 | |
669 | // basic_resolver functions. | |
670 | ||
671 | resolver.cancel(); | |
672 | ||
b32b8144 FG |
673 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
674 | ip::udp::resolver::results_type results1 = resolver.resolve(q); | |
675 | (void)results1; | |
676 | ||
677 | ip::udp::resolver::results_type results2 = resolver.resolve(q, ec); | |
678 | (void)results2; | |
679 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
680 | ||
681 | ip::udp::resolver::results_type results3 = resolver.resolve("", ""); | |
682 | (void)results3; | |
7c673cae | 683 | |
b32b8144 FG |
684 | ip::udp::resolver::results_type results4 = resolver.resolve("", "", ec); |
685 | (void)results4; | |
7c673cae | 686 | |
b32b8144 FG |
687 | ip::udp::resolver::results_type results5 = |
688 | resolver.resolve("", "", ip::udp::resolver::flags()); | |
689 | (void)results5; | |
7c673cae | 690 | |
b32b8144 FG |
691 | ip::udp::resolver::results_type results6 = |
692 | resolver.resolve("", "", ip::udp::resolver::flags(), ec); | |
693 | (void)results6; | |
7c673cae | 694 | |
b32b8144 FG |
695 | ip::udp::resolver::results_type results7 = |
696 | resolver.resolve(ip::udp::v4(), "", ""); | |
697 | (void)results7; | |
698 | ||
699 | ip::udp::resolver::results_type results8 = | |
700 | resolver.resolve(ip::udp::v4(), "", "", ec); | |
701 | (void)results8; | |
702 | ||
703 | ip::udp::resolver::results_type results9 = | |
704 | resolver.resolve(ip::udp::v4(), "", "", ip::udp::resolver::flags()); | |
705 | (void)results9; | |
706 | ||
707 | ip::udp::resolver::results_type results10 = | |
708 | resolver.resolve(ip::udp::v4(), "", "", ip::udp::resolver::flags(), ec); | |
709 | (void)results10; | |
710 | ||
711 | ip::udp::resolver::results_type results11 = resolver.resolve(e); | |
712 | (void)results11; | |
713 | ||
714 | ip::udp::resolver::results_type results12 = resolver.resolve(e, ec); | |
715 | (void)results12; | |
716 | ||
717 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
718 | resolver.async_resolve(q, resolve_handler()); | |
7c673cae FG |
719 | int i1 = resolver.async_resolve(q, lazy); |
720 | (void)i1; | |
b32b8144 FG |
721 | double d1 = resolver.async_resolve(q, dlazy); |
722 | (void)d1; | |
723 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae | 724 | |
b32b8144 FG |
725 | resolver.async_resolve("", "", resolve_handler()); |
726 | int i2 = resolver.async_resolve("", "", lazy); | |
7c673cae | 727 | (void)i2; |
b32b8144 FG |
728 | #if !defined(BOOST_ASIO_NO_DEPRECATED) |
729 | double d2 = resolver.async_resolve("", "", dlazy); | |
730 | (void)d2; | |
731 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
732 | ||
733 | resolver.async_resolve("", "", | |
734 | ip::udp::resolver::flags(), resolve_handler()); | |
735 | int i3 = resolver.async_resolve("", "", | |
736 | ip::udp::resolver::flags(), lazy); | |
737 | (void)i3; | |
738 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
739 | double d3 = resolver.async_resolve("", "", | |
740 | ip::udp::resolver::flags(), dlazy); | |
741 | (void)d3; | |
742 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
743 | ||
744 | resolver.async_resolve(ip::udp::v4(), "", "", resolve_handler()); | |
745 | int i4 = resolver.async_resolve(ip::udp::v4(), "", "", lazy); | |
746 | (void)i4; | |
747 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
748 | double d4 = resolver.async_resolve(ip::udp::v4(), "", "", dlazy); | |
749 | (void)d4; | |
750 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
751 | ||
752 | resolver.async_resolve(ip::udp::v4(), | |
753 | "", "", ip::udp::resolver::flags(), resolve_handler()); | |
754 | int i5 = resolver.async_resolve(ip::udp::v4(), | |
755 | "", "", ip::udp::resolver::flags(), lazy); | |
756 | (void)i5; | |
757 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
758 | double d5 = resolver.async_resolve(ip::udp::v4(), | |
759 | "", "", ip::udp::resolver::flags(), dlazy); | |
760 | (void)d5; | |
761 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
762 | ||
763 | resolver.async_resolve(e, resolve_handler()); | |
764 | int i6 = resolver.async_resolve(e, lazy); | |
765 | (void)i6; | |
766 | #if !defined(BOOST_ASIO_NO_DEPRECATED) | |
767 | double d6 = resolver.async_resolve(e, dlazy); | |
768 | (void)d6; | |
769 | #endif // !defined(BOOST_ASIO_NO_DEPRECATED) | |
7c673cae FG |
770 | } |
771 | catch (std::exception&) | |
772 | { | |
773 | } | |
774 | } | |
775 | ||
776 | } // namespace ip_udp_resolver_compile | |
777 | ||
778 | //------------------------------------------------------------------------------ | |
779 | ||
780 | BOOST_ASIO_TEST_SUITE | |
781 | ( | |
782 | "ip/udp", | |
783 | BOOST_ASIO_TEST_CASE(ip_udp_socket_compile::test) | |
784 | BOOST_ASIO_TEST_CASE(ip_udp_socket_runtime::test) | |
785 | BOOST_ASIO_TEST_CASE(ip_udp_resolver_compile::test) | |
786 | ) |