5 // Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
11 // Disable autolinking for unit tests.
12 #if !defined(BOOST_ALL_NO_LIB)
13 #define BOOST_ALL_NO_LIB 1
14 #endif // !defined(BOOST_ALL_NO_LIB)
16 // Test that header file is self-contained.
17 #include <boost/asio/connect.hpp>
20 #include <boost/asio/detail/thread.hpp>
21 #include <boost/asio/ip/tcp.hpp>
23 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
24 # include <boost/bind/bind.hpp>
25 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
26 # include <functional>
27 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
29 #include "unit_test.hpp"
31 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
32 namespace bindns
= boost
;
33 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
34 namespace bindns
= std
;
35 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
36 using bindns::placeholders::_1
;
37 using bindns::placeholders::_2
;
43 : acceptor_(io_context_
,
44 boost::asio::ip::tcp::endpoint(
45 boost::asio::ip::address_v4::loopback(), 0)),
46 target_endpoint_(acceptor_
.local_endpoint()),
48 thread_(bindns::bind(&connection_sink::run
, this))
58 boost::asio::ip::tcp::endpoint
target_endpoint()
60 return target_endpoint_
;
72 acceptor_
.async_accept(socket_
,
73 bindns::bind(&connection_sink::handle_accept
, this));
76 boost::asio::io_context io_context_
;
77 boost::asio::ip::tcp::acceptor acceptor_
;
78 boost::asio::ip::tcp::endpoint target_endpoint_
;
79 boost::asio::ip::tcp::socket socket_
;
80 boost::asio::detail::thread thread_
;
83 bool true_cond_1(const boost::system::error_code
& /*ec*/,
84 const boost::asio::ip::tcp::endpoint
& /*endpoint*/)
91 template <typename Endpoint
>
92 bool operator()(const boost::system::error_code
& /*ec*/,
93 const Endpoint
& /*endpoint*/)
99 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator
legacy_true_cond_1(
100 const boost::system::error_code
& /*ec*/,
101 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator next
)
106 struct legacy_true_cond_2
108 template <typename Iterator
>
109 Iterator
operator()(const boost::system::error_code
& /*ec*/, Iterator next
)
115 bool false_cond(const boost::system::error_code
& /*ec*/,
116 const boost::asio::ip::tcp::endpoint
& /*endpoint*/)
121 void range_handler(const boost::system::error_code
& ec
,
122 const boost::asio::ip::tcp::endpoint
& endpoint
,
123 boost::system::error_code
* out_ec
,
124 boost::asio::ip::tcp::endpoint
* out_endpoint
)
127 *out_endpoint
= endpoint
;
130 void iter_handler(const boost::system::error_code
& ec
,
131 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator iter
,
132 boost::system::error_code
* out_ec
,
133 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator
* out_iter
)
139 void test_connect_range()
141 connection_sink sink
;
142 boost::asio::io_context io_context
;
143 boost::asio::ip::tcp::socket
socket(io_context
);
144 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
145 boost::asio::ip::tcp::endpoint result
;
149 result
= boost::asio::connect(socket
, endpoints
);
150 BOOST_ASIO_CHECK(false);
152 catch (boost::system::system_error
& e
)
154 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
157 endpoints
.push_back(sink
.target_endpoint());
159 result
= boost::asio::connect(socket
, endpoints
);
160 BOOST_ASIO_CHECK(result
== endpoints
[0]);
162 endpoints
.push_back(sink
.target_endpoint());
164 result
= boost::asio::connect(socket
, endpoints
);
165 BOOST_ASIO_CHECK(result
== endpoints
[0]);
167 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
169 result
= boost::asio::connect(socket
, endpoints
);
170 BOOST_ASIO_CHECK(result
== endpoints
[1]);
173 void test_connect_range_ec()
175 connection_sink sink
;
176 boost::asio::io_context io_context
;
177 boost::asio::ip::tcp::socket
socket(io_context
);
178 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
179 boost::asio::ip::tcp::endpoint result
;
180 boost::system::error_code ec
;
182 result
= boost::asio::connect(socket
, endpoints
, ec
);
183 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
184 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
186 endpoints
.push_back(sink
.target_endpoint());
188 result
= boost::asio::connect(socket
, endpoints
, ec
);
189 BOOST_ASIO_CHECK(result
== endpoints
[0]);
190 BOOST_ASIO_CHECK(!ec
);
192 endpoints
.push_back(sink
.target_endpoint());
194 result
= boost::asio::connect(socket
, endpoints
, ec
);
195 BOOST_ASIO_CHECK(result
== endpoints
[0]);
196 BOOST_ASIO_CHECK(!ec
);
198 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
200 result
= boost::asio::connect(socket
, endpoints
, ec
);
201 BOOST_ASIO_CHECK(result
== endpoints
[1]);
202 BOOST_ASIO_CHECK(!ec
);
205 void test_connect_range_cond()
207 connection_sink sink
;
208 boost::asio::io_context io_context
;
209 boost::asio::ip::tcp::socket
socket(io_context
);
210 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
211 boost::asio::ip::tcp::endpoint result
;
215 result
= boost::asio::connect(socket
, endpoints
, true_cond_1
);
216 BOOST_ASIO_CHECK(false);
218 catch (boost::system::system_error
& e
)
220 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
225 result
= boost::asio::connect(socket
, endpoints
, true_cond_2());
226 BOOST_ASIO_CHECK(false);
228 catch (boost::system::system_error
& e
)
230 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
235 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_1
);
236 BOOST_ASIO_CHECK(false);
238 catch (boost::system::system_error
& e
)
240 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
245 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_2());
246 BOOST_ASIO_CHECK(false);
248 catch (boost::system::system_error
& e
)
250 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
255 result
= boost::asio::connect(socket
, endpoints
, false_cond
);
256 BOOST_ASIO_CHECK(false);
258 catch (boost::system::system_error
& e
)
260 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
263 endpoints
.push_back(sink
.target_endpoint());
265 result
= boost::asio::connect(socket
, endpoints
, true_cond_1
);
266 BOOST_ASIO_CHECK(result
== endpoints
[0]);
268 result
= boost::asio::connect(socket
, endpoints
, true_cond_2());
269 BOOST_ASIO_CHECK(result
== endpoints
[0]);
271 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_1
);
272 BOOST_ASIO_CHECK(result
== endpoints
[0]);
274 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_2());
275 BOOST_ASIO_CHECK(result
== endpoints
[0]);
279 result
= boost::asio::connect(socket
, endpoints
, false_cond
);
280 BOOST_ASIO_CHECK(false);
282 catch (boost::system::system_error
& e
)
284 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
287 endpoints
.push_back(sink
.target_endpoint());
289 result
= boost::asio::connect(socket
, endpoints
, true_cond_1
);
290 BOOST_ASIO_CHECK(result
== endpoints
[0]);
292 result
= boost::asio::connect(socket
, endpoints
, true_cond_2());
293 BOOST_ASIO_CHECK(result
== endpoints
[0]);
295 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_1
);
296 BOOST_ASIO_CHECK(result
== endpoints
[0]);
298 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_2());
299 BOOST_ASIO_CHECK(result
== endpoints
[0]);
303 result
= boost::asio::connect(socket
, endpoints
, false_cond
);
304 BOOST_ASIO_CHECK(false);
306 catch (boost::system::system_error
& e
)
308 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
311 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
313 result
= boost::asio::connect(socket
, endpoints
, true_cond_1
);
314 BOOST_ASIO_CHECK(result
== endpoints
[1]);
316 result
= boost::asio::connect(socket
, endpoints
, true_cond_2());
317 BOOST_ASIO_CHECK(result
== endpoints
[1]);
319 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_1
);
320 BOOST_ASIO_CHECK(result
== endpoints
[1]);
322 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_2());
323 BOOST_ASIO_CHECK(result
== endpoints
[1]);
327 result
= boost::asio::connect(socket
, endpoints
, false_cond
);
328 BOOST_ASIO_CHECK(false);
330 catch (boost::system::system_error
& e
)
332 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
336 void test_connect_range_cond_ec()
338 connection_sink sink
;
339 boost::asio::io_context io_context
;
340 boost::asio::ip::tcp::socket
socket(io_context
);
341 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
342 boost::asio::ip::tcp::endpoint result
;
343 boost::system::error_code ec
;
345 result
= boost::asio::connect(socket
, endpoints
, true_cond_1
, ec
);
346 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
347 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
349 result
= boost::asio::connect(socket
, endpoints
, true_cond_2(), ec
);
350 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
351 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
353 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_1
, ec
);
354 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
355 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
357 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_2(), ec
);
358 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
359 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
361 result
= boost::asio::connect(socket
, endpoints
, false_cond
, ec
);
362 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
363 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
365 endpoints
.push_back(sink
.target_endpoint());
367 result
= boost::asio::connect(socket
, endpoints
, true_cond_1
, ec
);
368 BOOST_ASIO_CHECK(result
== endpoints
[0]);
369 BOOST_ASIO_CHECK(!ec
);
371 result
= boost::asio::connect(socket
, endpoints
, true_cond_2(), ec
);
372 BOOST_ASIO_CHECK(result
== endpoints
[0]);
373 BOOST_ASIO_CHECK(!ec
);
375 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_1
, ec
);
376 BOOST_ASIO_CHECK(result
== endpoints
[0]);
377 BOOST_ASIO_CHECK(!ec
);
379 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_2(), ec
);
380 BOOST_ASIO_CHECK(result
== endpoints
[0]);
381 BOOST_ASIO_CHECK(!ec
);
383 result
= boost::asio::connect(socket
, endpoints
, false_cond
, ec
);
384 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
385 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
387 endpoints
.push_back(sink
.target_endpoint());
389 result
= boost::asio::connect(socket
, endpoints
, true_cond_1
, ec
);
390 BOOST_ASIO_CHECK(result
== endpoints
[0]);
391 BOOST_ASIO_CHECK(!ec
);
393 result
= boost::asio::connect(socket
, endpoints
, true_cond_2(), ec
);
394 BOOST_ASIO_CHECK(result
== endpoints
[0]);
395 BOOST_ASIO_CHECK(!ec
);
397 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_1
, ec
);
398 BOOST_ASIO_CHECK(result
== endpoints
[0]);
399 BOOST_ASIO_CHECK(!ec
);
401 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_2(), ec
);
402 BOOST_ASIO_CHECK(result
== endpoints
[0]);
403 BOOST_ASIO_CHECK(!ec
);
405 result
= boost::asio::connect(socket
, endpoints
, false_cond
, ec
);
406 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
407 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
409 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
411 result
= boost::asio::connect(socket
, endpoints
, true_cond_1
, ec
);
412 BOOST_ASIO_CHECK(result
== endpoints
[1]);
413 BOOST_ASIO_CHECK(!ec
);
415 result
= boost::asio::connect(socket
, endpoints
, true_cond_2(), ec
);
416 BOOST_ASIO_CHECK(result
== endpoints
[1]);
417 BOOST_ASIO_CHECK(!ec
);
419 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_1
, ec
);
420 BOOST_ASIO_CHECK(result
== endpoints
[1]);
421 BOOST_ASIO_CHECK(!ec
);
423 result
= boost::asio::connect(socket
, endpoints
, legacy_true_cond_2(), ec
);
424 BOOST_ASIO_CHECK(result
== endpoints
[1]);
425 BOOST_ASIO_CHECK(!ec
);
427 result
= boost::asio::connect(socket
, endpoints
, false_cond
, ec
);
428 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
429 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
432 void test_connect_iter()
434 connection_sink sink
;
435 boost::asio::io_context io_context
;
436 boost::asio::ip::tcp::socket
socket(io_context
);
437 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
438 const std::vector
<boost::asio::ip::tcp::endpoint
>& cendpoints
= endpoints
;
439 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator result
;
443 result
= boost::asio::connect(socket
, cendpoints
.begin(), cendpoints
.end());
444 BOOST_ASIO_CHECK(false);
446 catch (boost::system::system_error
& e
)
448 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
451 endpoints
.push_back(sink
.target_endpoint());
453 result
= boost::asio::connect(socket
, cendpoints
.begin(), cendpoints
.end());
454 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
456 endpoints
.push_back(sink
.target_endpoint());
458 result
= boost::asio::connect(socket
, cendpoints
.begin(), cendpoints
.end());
459 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
461 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
463 result
= boost::asio::connect(socket
, cendpoints
.begin(), cendpoints
.end());
464 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
467 void test_connect_iter_ec()
469 connection_sink sink
;
470 boost::asio::io_context io_context
;
471 boost::asio::ip::tcp::socket
socket(io_context
);
472 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
473 const std::vector
<boost::asio::ip::tcp::endpoint
>& cendpoints
= endpoints
;
474 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator result
;
475 boost::system::error_code ec
;
477 result
= boost::asio::connect(socket
,
478 cendpoints
.begin(), cendpoints
.end(), ec
);
479 BOOST_ASIO_CHECK(result
== cendpoints
.end());
480 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
482 endpoints
.push_back(sink
.target_endpoint());
484 result
= boost::asio::connect(socket
,
485 cendpoints
.begin(), cendpoints
.end(), ec
);
486 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
487 BOOST_ASIO_CHECK(!ec
);
489 endpoints
.push_back(sink
.target_endpoint());
491 result
= boost::asio::connect(socket
,
492 cendpoints
.begin(), cendpoints
.end(), ec
);
493 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
494 BOOST_ASIO_CHECK(!ec
);
496 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
498 result
= boost::asio::connect(socket
,
499 cendpoints
.begin(), cendpoints
.end(), ec
);
500 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
501 BOOST_ASIO_CHECK(!ec
);
504 void test_connect_iter_cond()
506 connection_sink sink
;
507 boost::asio::io_context io_context
;
508 boost::asio::ip::tcp::socket
socket(io_context
);
509 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
510 const std::vector
<boost::asio::ip::tcp::endpoint
>& cendpoints
= endpoints
;
511 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator result
;
515 result
= boost::asio::connect(socket
, cendpoints
.begin(),
516 cendpoints
.end(), true_cond_1
);
517 BOOST_ASIO_CHECK(false);
519 catch (boost::system::system_error
& e
)
521 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
526 result
= boost::asio::connect(socket
, cendpoints
.begin(),
527 cendpoints
.end(), true_cond_2());
528 BOOST_ASIO_CHECK(false);
530 catch (boost::system::system_error
& e
)
532 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
537 result
= boost::asio::connect(socket
, cendpoints
.begin(),
538 cendpoints
.end(), legacy_true_cond_1
);
539 BOOST_ASIO_CHECK(false);
541 catch (boost::system::system_error
& e
)
543 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
548 result
= boost::asio::connect(socket
, cendpoints
.begin(),
549 cendpoints
.end(), legacy_true_cond_2());
550 BOOST_ASIO_CHECK(false);
552 catch (boost::system::system_error
& e
)
554 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
559 result
= boost::asio::connect(socket
, cendpoints
.begin(),
560 cendpoints
.end(), false_cond
);
561 BOOST_ASIO_CHECK(false);
563 catch (boost::system::system_error
& e
)
565 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
568 endpoints
.push_back(sink
.target_endpoint());
570 result
= boost::asio::connect(socket
, cendpoints
.begin(),
571 cendpoints
.end(), true_cond_1
);
572 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
574 result
= boost::asio::connect(socket
, cendpoints
.begin(),
575 cendpoints
.end(), true_cond_2());
576 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
578 result
= boost::asio::connect(socket
, cendpoints
.begin(),
579 cendpoints
.end(), legacy_true_cond_1
);
580 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
582 result
= boost::asio::connect(socket
, cendpoints
.begin(),
583 cendpoints
.end(), legacy_true_cond_2());
584 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
588 result
= boost::asio::connect(socket
, cendpoints
.begin(),
589 cendpoints
.end(), false_cond
);
590 BOOST_ASIO_CHECK(false);
592 catch (boost::system::system_error
& e
)
594 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
597 endpoints
.push_back(sink
.target_endpoint());
599 result
= boost::asio::connect(socket
, cendpoints
.begin(),
600 cendpoints
.end(), true_cond_1
);
601 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
603 result
= boost::asio::connect(socket
, cendpoints
.begin(),
604 cendpoints
.end(), true_cond_2());
605 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
607 result
= boost::asio::connect(socket
, cendpoints
.begin(),
608 cendpoints
.end(), legacy_true_cond_1
);
609 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
611 result
= boost::asio::connect(socket
, cendpoints
.begin(),
612 cendpoints
.end(), legacy_true_cond_2());
613 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
617 result
= boost::asio::connect(socket
, cendpoints
.begin(),
618 cendpoints
.end(), false_cond
);
619 BOOST_ASIO_CHECK(false);
621 catch (boost::system::system_error
& e
)
623 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
626 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
628 result
= boost::asio::connect(socket
, cendpoints
.begin(),
629 cendpoints
.end(), true_cond_1
);
630 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
632 result
= boost::asio::connect(socket
, cendpoints
.begin(),
633 cendpoints
.end(), true_cond_2());
634 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
636 result
= boost::asio::connect(socket
, cendpoints
.begin(),
637 cendpoints
.end(), legacy_true_cond_1
);
638 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
640 result
= boost::asio::connect(socket
, cendpoints
.begin(),
641 cendpoints
.end(), legacy_true_cond_2());
642 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
646 result
= boost::asio::connect(socket
, cendpoints
.begin(),
647 cendpoints
.end(), false_cond
);
648 BOOST_ASIO_CHECK(false);
650 catch (boost::system::system_error
& e
)
652 BOOST_ASIO_CHECK(e
.code() == boost::asio::error::not_found
);
656 void test_connect_iter_cond_ec()
658 connection_sink sink
;
659 boost::asio::io_context io_context
;
660 boost::asio::ip::tcp::socket
socket(io_context
);
661 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
662 const std::vector
<boost::asio::ip::tcp::endpoint
>& cendpoints
= endpoints
;
663 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator result
;
664 boost::system::error_code ec
;
666 result
= boost::asio::connect(socket
, cendpoints
.begin(),
667 cendpoints
.end(), true_cond_1
, ec
);
668 BOOST_ASIO_CHECK(result
== cendpoints
.end());
669 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
671 result
= boost::asio::connect(socket
, cendpoints
.begin(),
672 cendpoints
.end(), true_cond_2(), ec
);
673 BOOST_ASIO_CHECK(result
== cendpoints
.end());
674 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
676 result
= boost::asio::connect(socket
, cendpoints
.begin(),
677 cendpoints
.end(), legacy_true_cond_1
, ec
);
678 BOOST_ASIO_CHECK(result
== cendpoints
.end());
679 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
681 result
= boost::asio::connect(socket
, cendpoints
.begin(),
682 cendpoints
.end(), legacy_true_cond_2(), ec
);
683 BOOST_ASIO_CHECK(result
== cendpoints
.end());
684 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
686 result
= boost::asio::connect(socket
, cendpoints
.begin(),
687 cendpoints
.end(), false_cond
, ec
);
688 BOOST_ASIO_CHECK(result
== cendpoints
.end());
689 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
691 endpoints
.push_back(sink
.target_endpoint());
693 result
= boost::asio::connect(socket
, cendpoints
.begin(),
694 cendpoints
.end(), true_cond_1
, ec
);
695 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
696 BOOST_ASIO_CHECK(!ec
);
698 result
= boost::asio::connect(socket
, cendpoints
.begin(),
699 cendpoints
.end(), true_cond_2(), ec
);
700 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
701 BOOST_ASIO_CHECK(!ec
);
703 result
= boost::asio::connect(socket
, cendpoints
.begin(),
704 cendpoints
.end(), legacy_true_cond_1
, ec
);
705 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
706 BOOST_ASIO_CHECK(!ec
);
708 result
= boost::asio::connect(socket
, cendpoints
.begin(),
709 cendpoints
.end(), legacy_true_cond_2(), ec
);
710 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
711 BOOST_ASIO_CHECK(!ec
);
713 result
= boost::asio::connect(socket
, cendpoints
.begin(),
714 cendpoints
.end(), false_cond
, ec
);
715 BOOST_ASIO_CHECK(result
== cendpoints
.end());
716 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
718 endpoints
.push_back(sink
.target_endpoint());
720 result
= boost::asio::connect(socket
, cendpoints
.begin(),
721 cendpoints
.end(), true_cond_1
, ec
);
722 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
723 BOOST_ASIO_CHECK(!ec
);
725 result
= boost::asio::connect(socket
, cendpoints
.begin(),
726 cendpoints
.end(), true_cond_2(), ec
);
727 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
728 BOOST_ASIO_CHECK(!ec
);
730 result
= boost::asio::connect(socket
, cendpoints
.begin(),
731 cendpoints
.end(), legacy_true_cond_1
, ec
);
732 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
733 BOOST_ASIO_CHECK(!ec
);
735 result
= boost::asio::connect(socket
, cendpoints
.begin(),
736 cendpoints
.end(), legacy_true_cond_2(), ec
);
737 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
738 BOOST_ASIO_CHECK(!ec
);
740 result
= boost::asio::connect(socket
, cendpoints
.begin(),
741 cendpoints
.end(), false_cond
, ec
);
742 BOOST_ASIO_CHECK(result
== cendpoints
.end());
743 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
745 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
747 result
= boost::asio::connect(socket
, cendpoints
.begin(),
748 cendpoints
.end(), true_cond_1
, ec
);
749 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
750 BOOST_ASIO_CHECK(!ec
);
752 result
= boost::asio::connect(socket
, cendpoints
.begin(),
753 cendpoints
.end(), true_cond_2(), ec
);
754 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
755 BOOST_ASIO_CHECK(!ec
);
757 result
= boost::asio::connect(socket
, cendpoints
.begin(),
758 cendpoints
.end(), legacy_true_cond_1
, ec
);
759 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
760 BOOST_ASIO_CHECK(!ec
);
762 result
= boost::asio::connect(socket
, cendpoints
.begin(),
763 cendpoints
.end(), legacy_true_cond_2(), ec
);
764 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
765 BOOST_ASIO_CHECK(!ec
);
767 result
= boost::asio::connect(socket
, cendpoints
.begin(),
768 cendpoints
.end(), false_cond
, ec
);
769 BOOST_ASIO_CHECK(result
== cendpoints
.end());
770 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
773 void test_async_connect_range()
775 connection_sink sink
;
776 boost::asio::io_context io_context
;
777 boost::asio::ip::tcp::socket
socket(io_context
);
778 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
779 boost::asio::ip::tcp::endpoint result
;
780 boost::system::error_code ec
;
782 boost::asio::async_connect(socket
, endpoints
,
783 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
784 io_context
.restart();
786 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
787 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
789 endpoints
.push_back(sink
.target_endpoint());
791 boost::asio::async_connect(socket
, endpoints
,
792 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
793 io_context
.restart();
795 BOOST_ASIO_CHECK(result
== endpoints
[0]);
796 BOOST_ASIO_CHECK(!ec
);
798 endpoints
.push_back(sink
.target_endpoint());
800 boost::asio::async_connect(socket
, endpoints
,
801 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
802 io_context
.restart();
804 BOOST_ASIO_CHECK(result
== endpoints
[0]);
805 BOOST_ASIO_CHECK(!ec
);
807 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
809 boost::asio::async_connect(socket
, endpoints
,
810 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
811 io_context
.restart();
813 BOOST_ASIO_CHECK(result
== endpoints
[1]);
814 BOOST_ASIO_CHECK(!ec
);
817 void test_async_connect_range_cond()
819 connection_sink sink
;
820 boost::asio::io_context io_context
;
821 boost::asio::ip::tcp::socket
socket(io_context
);
822 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
823 boost::asio::ip::tcp::endpoint result
;
824 boost::system::error_code ec
;
826 boost::asio::async_connect(socket
, endpoints
, true_cond_1
,
827 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
828 io_context
.restart();
830 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
831 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
833 boost::asio::async_connect(socket
, endpoints
, true_cond_2(),
834 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
835 io_context
.restart();
837 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
838 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
840 boost::asio::async_connect(socket
, endpoints
, legacy_true_cond_1
,
841 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
842 io_context
.restart();
844 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
845 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
847 boost::asio::async_connect(socket
, endpoints
, legacy_true_cond_2(),
848 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
849 io_context
.restart();
851 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
852 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
854 boost::asio::async_connect(socket
, endpoints
, false_cond
,
855 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
856 io_context
.restart();
858 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
859 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
861 endpoints
.push_back(sink
.target_endpoint());
863 boost::asio::async_connect(socket
, endpoints
, true_cond_1
,
864 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
865 io_context
.restart();
867 BOOST_ASIO_CHECK(result
== endpoints
[0]);
868 BOOST_ASIO_CHECK(!ec
);
870 boost::asio::async_connect(socket
, endpoints
, true_cond_2(),
871 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
872 io_context
.restart();
874 BOOST_ASIO_CHECK(result
== endpoints
[0]);
875 BOOST_ASIO_CHECK(!ec
);
877 boost::asio::async_connect(socket
, endpoints
, legacy_true_cond_1
,
878 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
879 io_context
.restart();
881 BOOST_ASIO_CHECK(result
== endpoints
[0]);
882 BOOST_ASIO_CHECK(!ec
);
884 boost::asio::async_connect(socket
, endpoints
, legacy_true_cond_2(),
885 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
886 io_context
.restart();
888 BOOST_ASIO_CHECK(result
== endpoints
[0]);
889 BOOST_ASIO_CHECK(!ec
);
891 boost::asio::async_connect(socket
, endpoints
, false_cond
,
892 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
893 io_context
.restart();
895 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
896 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
898 endpoints
.push_back(sink
.target_endpoint());
900 boost::asio::async_connect(socket
, endpoints
, true_cond_1
,
901 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
902 io_context
.restart();
904 BOOST_ASIO_CHECK(result
== endpoints
[0]);
905 BOOST_ASIO_CHECK(!ec
);
907 boost::asio::async_connect(socket
, endpoints
, true_cond_2(),
908 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
909 io_context
.restart();
911 BOOST_ASIO_CHECK(result
== endpoints
[0]);
912 BOOST_ASIO_CHECK(!ec
);
914 boost::asio::async_connect(socket
, endpoints
, legacy_true_cond_1
,
915 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
916 io_context
.restart();
918 BOOST_ASIO_CHECK(result
== endpoints
[0]);
919 BOOST_ASIO_CHECK(!ec
);
921 boost::asio::async_connect(socket
, endpoints
, legacy_true_cond_2(),
922 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
923 io_context
.restart();
925 BOOST_ASIO_CHECK(result
== endpoints
[0]);
926 BOOST_ASIO_CHECK(!ec
);
928 boost::asio::async_connect(socket
, endpoints
, false_cond
,
929 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
930 io_context
.restart();
932 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
933 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
935 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
937 boost::asio::async_connect(socket
, endpoints
, true_cond_1
,
938 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
939 io_context
.restart();
941 BOOST_ASIO_CHECK(result
== endpoints
[1]);
942 BOOST_ASIO_CHECK(!ec
);
944 boost::asio::async_connect(socket
, endpoints
, true_cond_2(),
945 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
946 io_context
.restart();
948 BOOST_ASIO_CHECK(result
== endpoints
[1]);
949 BOOST_ASIO_CHECK(!ec
);
951 boost::asio::async_connect(socket
, endpoints
, legacy_true_cond_1
,
952 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
953 io_context
.restart();
955 BOOST_ASIO_CHECK(result
== endpoints
[1]);
956 BOOST_ASIO_CHECK(!ec
);
958 boost::asio::async_connect(socket
, endpoints
, legacy_true_cond_2(),
959 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
960 io_context
.restart();
962 BOOST_ASIO_CHECK(result
== endpoints
[1]);
963 BOOST_ASIO_CHECK(!ec
);
965 boost::asio::async_connect(socket
, endpoints
, false_cond
,
966 bindns::bind(range_handler
, _1
, _2
, &ec
, &result
));
967 io_context
.restart();
969 BOOST_ASIO_CHECK(result
== boost::asio::ip::tcp::endpoint());
970 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
973 void test_async_connect_iter()
975 connection_sink sink
;
976 boost::asio::io_context io_context
;
977 boost::asio::ip::tcp::socket
socket(io_context
);
978 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
979 const std::vector
<boost::asio::ip::tcp::endpoint
>& cendpoints
= endpoints
;
980 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator result
;
981 boost::system::error_code ec
;
983 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
984 bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
985 io_context
.restart();
987 BOOST_ASIO_CHECK(result
== cendpoints
.end());
988 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
990 endpoints
.push_back(sink
.target_endpoint());
992 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
993 bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
994 io_context
.restart();
996 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
997 BOOST_ASIO_CHECK(!ec
);
999 endpoints
.push_back(sink
.target_endpoint());
1001 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1002 bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1003 io_context
.restart();
1005 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1006 BOOST_ASIO_CHECK(!ec
);
1008 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
1010 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1011 bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1012 io_context
.restart();
1014 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
1015 BOOST_ASIO_CHECK(!ec
);
1018 void test_async_connect_iter_cond()
1020 connection_sink sink
;
1021 boost::asio::io_context io_context
;
1022 boost::asio::ip::tcp::socket
socket(io_context
);
1023 std::vector
<boost::asio::ip::tcp::endpoint
> endpoints
;
1024 const std::vector
<boost::asio::ip::tcp::endpoint
>& cendpoints
= endpoints
;
1025 std::vector
<boost::asio::ip::tcp::endpoint
>::const_iterator result
;
1026 boost::system::error_code ec
;
1028 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1029 true_cond_1
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1030 io_context
.restart();
1032 BOOST_ASIO_CHECK(result
== cendpoints
.end());
1033 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
1035 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1036 true_cond_2(), bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1037 io_context
.restart();
1039 BOOST_ASIO_CHECK(result
== cendpoints
.end());
1040 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
1042 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1043 legacy_true_cond_1
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1044 io_context
.restart();
1046 BOOST_ASIO_CHECK(result
== cendpoints
.end());
1047 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
1049 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1050 legacy_true_cond_2(), bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1051 io_context
.restart();
1053 BOOST_ASIO_CHECK(result
== cendpoints
.end());
1054 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
1056 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1057 false_cond
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1058 io_context
.restart();
1060 BOOST_ASIO_CHECK(result
== cendpoints
.end());
1061 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
1063 endpoints
.push_back(sink
.target_endpoint());
1065 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1066 true_cond_1
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1067 io_context
.restart();
1069 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1070 BOOST_ASIO_CHECK(!ec
);
1072 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1073 true_cond_2(), bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1074 io_context
.restart();
1076 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1077 BOOST_ASIO_CHECK(!ec
);
1079 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1080 legacy_true_cond_1
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1081 io_context
.restart();
1083 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1084 BOOST_ASIO_CHECK(!ec
);
1086 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1087 legacy_true_cond_2(), bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1088 io_context
.restart();
1090 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1091 BOOST_ASIO_CHECK(!ec
);
1093 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1094 false_cond
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1095 io_context
.restart();
1097 BOOST_ASIO_CHECK(result
== cendpoints
.end());
1098 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
1100 endpoints
.push_back(sink
.target_endpoint());
1102 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1103 true_cond_1
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1104 io_context
.restart();
1106 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1107 BOOST_ASIO_CHECK(!ec
);
1109 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1110 true_cond_2(), bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1111 io_context
.restart();
1113 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1114 BOOST_ASIO_CHECK(!ec
);
1116 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1117 legacy_true_cond_1
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1118 io_context
.restart();
1120 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1121 BOOST_ASIO_CHECK(!ec
);
1123 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1124 legacy_true_cond_2(), bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1125 io_context
.restart();
1127 BOOST_ASIO_CHECK(result
== cendpoints
.begin());
1128 BOOST_ASIO_CHECK(!ec
);
1130 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1131 false_cond
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1132 io_context
.restart();
1134 BOOST_ASIO_CHECK(result
== cendpoints
.end());
1135 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
1137 endpoints
.insert(endpoints
.begin(), boost::asio::ip::tcp::endpoint());
1139 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1140 true_cond_1
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1141 io_context
.restart();
1143 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
1144 BOOST_ASIO_CHECK(!ec
);
1146 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1147 true_cond_2(), bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1148 io_context
.restart();
1150 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
1151 BOOST_ASIO_CHECK(!ec
);
1153 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1154 legacy_true_cond_1
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1155 io_context
.restart();
1157 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
1158 BOOST_ASIO_CHECK(!ec
);
1160 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1161 legacy_true_cond_2(), bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1162 io_context
.restart();
1164 BOOST_ASIO_CHECK(result
== cendpoints
.begin() + 1);
1165 BOOST_ASIO_CHECK(!ec
);
1167 boost::asio::async_connect(socket
, cendpoints
.begin(), cendpoints
.end(),
1168 false_cond
, bindns::bind(iter_handler
, _1
, _2
, &ec
, &result
));
1169 io_context
.restart();
1171 BOOST_ASIO_CHECK(result
== cendpoints
.end());
1172 BOOST_ASIO_CHECK(ec
== boost::asio::error::not_found
);
1175 BOOST_ASIO_TEST_SUITE
1178 BOOST_ASIO_TEST_CASE(test_connect_range
)
1179 BOOST_ASIO_TEST_CASE(test_connect_range_ec
)
1180 BOOST_ASIO_TEST_CASE(test_connect_range_cond
)
1181 BOOST_ASIO_TEST_CASE(test_connect_range_cond_ec
)
1182 BOOST_ASIO_TEST_CASE(test_connect_iter
)
1183 BOOST_ASIO_TEST_CASE(test_connect_iter_ec
)
1184 BOOST_ASIO_TEST_CASE(test_connect_iter_cond
)
1185 BOOST_ASIO_TEST_CASE(test_connect_iter_cond_ec
)
1186 BOOST_ASIO_TEST_CASE(test_async_connect_range
)
1187 BOOST_ASIO_TEST_CASE(test_async_connect_range_cond
)
1188 BOOST_ASIO_TEST_CASE(test_async_connect_iter
)
1189 BOOST_ASIO_TEST_CASE(test_async_connect_iter_cond
)