]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/asio/test/ip/udp.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / asio / test / ip / udp.cpp
1 //
2 // udp.cpp
3 // ~~~~~~~
4 //
5 // Copyright (c) 2003-2017 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 // 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>
20 #include <boost/asio/io_context.hpp>
21 #include "../unit_test.hpp"
22 #include "../archetypes/async_result.hpp"
23 #include "../archetypes/deprecated_async_result.hpp"
24 #include "../archetypes/gettable_socket_option.hpp"
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
43 struct connect_handler
44 {
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 };
53
54 struct wait_handler
55 {
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 };
64
65 struct send_handler
66 {
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 };
86
87 void test()
88 {
89 using namespace boost::asio;
90 namespace ip = boost::asio::ip;
91
92 try
93 {
94 io_context ioc;
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;
106 #if !defined(BOOST_ASIO_NO_DEPRECATED)
107 archetypes::deprecated_lazy_handler dlazy;
108 #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
109 boost::system::error_code ec;
110
111 // basic_datagram_socket constructors.
112
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));
118 #if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
119 ip::udp::socket::native_handle_type native_socket1
120 = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
121 ip::udp::socket socket6(ioc, ip::udp::v4(), native_socket1);
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)
131 socket1 = ip::udp::socket(ioc);
132 socket1 = std::move(socket2);
133 #endif // defined(BOOST_ASIO_HAS_MOVE)
134
135 // basic_io_object functions.
136
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;
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
175 socket1.release();
176 socket1.release(ec);
177
178 ip::udp::socket::native_handle_type native_socket4
179 = socket1.native_handle();
180 (void)native_socket4;
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),
206 connect_handler());
207 socket1.async_connect(ip::udp::endpoint(ip::udp::v6(), 0),
208 connect_handler());
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;
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)
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
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
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
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);
288 (void)i4;
289 int i5 = socket1.async_send(buffer(const_char_buffer), lazy);
290 (void)i5;
291 int i6 = socket1.async_send(null_buffers(), lazy);
292 (void)i6;
293 int i7 = socket1.async_send(buffer(mutable_char_buffer), in_flags, lazy);
294 (void)i7;
295 int i8 = socket1.async_send(buffer(const_char_buffer), in_flags, lazy);
296 (void)i8;
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)
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),
353 ip::udp::endpoint(ip::udp::v4(), 0), send_handler());
354 socket1.async_send_to(buffer(mutable_char_buffer),
355 ip::udp::endpoint(ip::udp::v6(), 0), send_handler());
356 socket1.async_send_to(buffer(const_char_buffer),
357 ip::udp::endpoint(ip::udp::v4(), 0), send_handler());
358 socket1.async_send_to(buffer(const_char_buffer),
359 ip::udp::endpoint(ip::udp::v6(), 0), send_handler());
360 socket1.async_send_to(null_buffers(),
361 ip::udp::endpoint(ip::udp::v4(), 0), send_handler());
362 socket1.async_send_to(null_buffers(),
363 ip::udp::endpoint(ip::udp::v6(), 0), send_handler());
364 socket1.async_send_to(buffer(mutable_char_buffer),
365 ip::udp::endpoint(ip::udp::v4(), 0), in_flags, send_handler());
366 socket1.async_send_to(buffer(mutable_char_buffer),
367 ip::udp::endpoint(ip::udp::v6(), 0), in_flags, send_handler());
368 socket1.async_send_to(buffer(const_char_buffer),
369 ip::udp::endpoint(ip::udp::v4(), 0), in_flags, send_handler());
370 socket1.async_send_to(buffer(const_char_buffer),
371 ip::udp::endpoint(ip::udp::v6(), 0), in_flags, send_handler());
372 socket1.async_send_to(null_buffers(),
373 ip::udp::endpoint(ip::udp::v4(), 0), in_flags, send_handler());
374 socket1.async_send_to(null_buffers(),
375 ip::udp::endpoint(ip::udp::v6(), 0), in_flags, send_handler());
376 int i10 = socket1.async_send_to(buffer(mutable_char_buffer),
377 ip::udp::endpoint(ip::udp::v4(), 0), lazy);
378 (void)i10;
379 int i11 = socket1.async_send_to(buffer(mutable_char_buffer),
380 ip::udp::endpoint(ip::udp::v6(), 0), lazy);
381 (void)i11;
382 int i12 = socket1.async_send_to(buffer(const_char_buffer),
383 ip::udp::endpoint(ip::udp::v4(), 0), lazy);
384 (void)i12;
385 int i13 = socket1.async_send_to(buffer(const_char_buffer),
386 ip::udp::endpoint(ip::udp::v6(), 0), lazy);
387 (void)i13;
388 int i14 = socket1.async_send_to(null_buffers(),
389 ip::udp::endpoint(ip::udp::v4(), 0), lazy);
390 (void)i14;
391 int i15 = socket1.async_send_to(null_buffers(),
392 ip::udp::endpoint(ip::udp::v6(), 0), lazy);
393 (void)i15;
394 int i16 = socket1.async_send_to(buffer(mutable_char_buffer),
395 ip::udp::endpoint(ip::udp::v4(), 0), in_flags, lazy);
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);
399 (void)i17;
400 int i18 = socket1.async_send_to(buffer(const_char_buffer),
401 ip::udp::endpoint(ip::udp::v4(), 0), in_flags, lazy);
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);
405 (void)i19;
406 int i20 = socket1.async_send_to(null_buffers(),
407 ip::udp::endpoint(ip::udp::v4(), 0), in_flags, lazy);
408 (void)i20;
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)
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
458 socket1.async_receive(buffer(mutable_char_buffer), receive_handler());
459 socket1.async_receive(null_buffers(), receive_handler());
460 socket1.async_receive(buffer(mutable_char_buffer), in_flags,
461 receive_handler());
462 socket1.async_receive(null_buffers(), in_flags, receive_handler());
463 int i22 = socket1.async_receive(buffer(mutable_char_buffer), lazy);
464 (void)i22;
465 int i23 = socket1.async_receive(null_buffers(), lazy);
466 (void)i23;
467 int i24 = socket1.async_receive(buffer(mutable_char_buffer),
468 in_flags, lazy);
469 (void)i24;
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)
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),
493 endpoint, receive_handler());
494 socket1.async_receive_from(null_buffers(),
495 endpoint, receive_handler());
496 socket1.async_receive_from(buffer(mutable_char_buffer),
497 endpoint, in_flags, receive_handler());
498 socket1.async_receive_from(null_buffers(),
499 endpoint, in_flags, receive_handler());
500 int i26 = socket1.async_receive_from(buffer(mutable_char_buffer),
501 endpoint, lazy);
502 (void)i26;
503 int i27 = socket1.async_receive_from(null_buffers(),
504 endpoint, lazy);
505 (void)i27;
506 int i28 = socket1.async_receive_from(buffer(mutable_char_buffer),
507 endpoint, in_flags, lazy);
508 (void)i28;
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)
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
570 io_context ioc;
571
572 ip::udp::socket s1(ioc, ip::udp::endpoint(ip::udp::v4(), 0));
573 ip::udp::endpoint target_endpoint = s1.local_endpoint();
574 target_endpoint.address(ip::address_v4::loopback());
575
576 ip::udp::socket s2(ioc);
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
598 ioc.run();
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
614 struct resolve_handler
615 {
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 };
625
626 void test()
627 {
628 using namespace boost::asio;
629 namespace ip = boost::asio::ip;
630
631 try
632 {
633 io_context ioc;
634 archetypes::lazy_handler lazy;
635 #if !defined(BOOST_ASIO_NO_DEPRECATED)
636 archetypes::deprecated_lazy_handler dlazy;
637 #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
638 boost::system::error_code ec;
639 #if !defined(BOOST_ASIO_NO_DEPRECATED)
640 ip::udp::resolver::query q(ip::udp::v4(), "localhost", "0");
641 #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
642 ip::udp::endpoint e(ip::address_v4::loopback(), 0);
643
644 // basic_resolver constructors.
645
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)
658
659 // basic_io_object functions.
660
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;
668
669 // basic_resolver functions.
670
671 resolver.cancel();
672
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;
683
684 ip::udp::resolver::results_type results4 = resolver.resolve("", "", ec);
685 (void)results4;
686
687 ip::udp::resolver::results_type results5 =
688 resolver.resolve("", "", ip::udp::resolver::flags());
689 (void)results5;
690
691 ip::udp::resolver::results_type results6 =
692 resolver.resolve("", "", ip::udp::resolver::flags(), ec);
693 (void)results6;
694
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());
719 int i1 = resolver.async_resolve(q, lazy);
720 (void)i1;
721 double d1 = resolver.async_resolve(q, dlazy);
722 (void)d1;
723 #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
724
725 resolver.async_resolve("", "", resolve_handler());
726 int i2 = resolver.async_resolve("", "", lazy);
727 (void)i2;
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)
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 )