]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/asio/test/ip/udp.cpp
Add patch for failing prerm scripts
[ceph.git] / ceph / src / boost / libs / asio / test / ip / udp.cpp
CommitLineData
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
41namespace ip_udp_socket_compile {
42
b32b8144 43struct 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&&) {}
49private:
50 connect_handler(const connect_handler&);
51#endif // defined(BOOST_ASIO_HAS_MOVE)
52};
7c673cae 53
b32b8144 54struct 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&&) {}
60private:
61 wait_handler(const wait_handler&);
62#endif // defined(BOOST_ASIO_HAS_MOVE)
63};
7c673cae 64
b32b8144 65struct 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&&) {}
71private:
72 send_handler(const send_handler&);
73#endif // defined(BOOST_ASIO_HAS_MOVE)
74};
75
76struct 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&&) {}
82private:
83 receive_handler(const receive_handler&);
84#endif // defined(BOOST_ASIO_HAS_MOVE)
85};
7c673cae
FG
86
87void 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
540namespace ip_udp_socket_runtime {
541
542void 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
549void 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
556void 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
612namespace ip_udp_resolver_compile {
613
b32b8144 614struct 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&&) {}
621private:
622 resolve_handler(const resolve_handler&);
623#endif // defined(BOOST_ASIO_HAS_MOVE)
624};
7c673cae
FG
625
626void 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
780BOOST_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)