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/read.hpp>
21 #include "archetypes/async_result.hpp"
22 #include <boost/asio/io_context.hpp>
23 #include <boost/asio/post.hpp>
24 #include <boost/asio/streambuf.hpp>
25 #include "unit_test.hpp"
27 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
28 # include <boost/bind/bind.hpp>
29 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
30 # include <functional>
31 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
33 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
34 #include <boost/array.hpp>
35 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
37 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
39 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
41 using namespace std
; // For memcmp, memcpy and memset.
46 typedef boost::asio::io_context::executor_type executor_type
;
48 test_stream(boost::asio::io_context
& io_context
)
49 : io_context_(io_context
),
56 executor_type
get_executor() BOOST_ASIO_NOEXCEPT
58 return io_context_
.get_executor();
61 void reset(const void* data
, size_t length
)
63 BOOST_ASIO_CHECK(length
<= max_length
);
65 memcpy(data_
, data
, length
);
68 next_read_length_
= length
;
71 void next_read_length(size_t length
)
73 next_read_length_
= length
;
76 template <typename Iterator
>
77 bool check_buffers(Iterator begin
, Iterator end
, size_t length
)
79 if (length
!= position_
)
82 Iterator iter
= begin
;
83 size_t checked_length
= 0;
84 for (; iter
!= end
&& checked_length
< length
; ++iter
)
86 size_t buffer_length
= boost::asio::buffer_size(*iter
);
87 if (buffer_length
> length
- checked_length
)
88 buffer_length
= length
- checked_length
;
89 if (memcmp(data_
+ checked_length
, iter
->data(), buffer_length
) != 0)
91 checked_length
+= buffer_length
;
97 template <typename Const_Buffers
>
98 bool check_buffers(const Const_Buffers
& buffers
, size_t length
)
100 return check_buffers(boost::asio::buffer_sequence_begin(buffers
),
101 boost::asio::buffer_sequence_end(buffers
), length
);
104 template <typename Mutable_Buffers
>
105 size_t read_some(const Mutable_Buffers
& buffers
)
107 size_t n
= boost::asio::buffer_copy(buffers
,
108 boost::asio::buffer(data_
, length_
) + position_
,
114 template <typename Mutable_Buffers
>
115 size_t read_some(const Mutable_Buffers
& buffers
,
116 boost::system::error_code
& ec
)
118 ec
= boost::system::error_code();
119 return read_some(buffers
);
122 template <typename Mutable_Buffers
, typename Handler
>
123 void async_read_some(const Mutable_Buffers
& buffers
,
124 BOOST_ASIO_MOVE_ARG(Handler
) handler
)
126 size_t bytes_transferred
= read_some(buffers
);
127 boost::asio::post(get_executor(),
128 boost::asio::detail::bind_handler(
129 BOOST_ASIO_MOVE_CAST(Handler
)(handler
),
130 boost::system::error_code(), bytes_transferred
));
134 boost::asio::io_context
& io_context_
;
135 enum { max_length
= 8192 };
136 char data_
[max_length
];
139 size_t next_read_length_
;
142 static const char read_data
[]
143 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
145 void test_2_arg_zero_buffers_read()
147 boost::asio::io_context ioc
;
149 std::vector
<boost::asio::mutable_buffer
> buffers
;
151 size_t bytes_transferred
= boost::asio::read(s
, buffers
);
152 BOOST_ASIO_CHECK(bytes_transferred
== 0);
155 void test_2_arg_mutable_buffer_read()
157 boost::asio::io_context ioc
;
159 char read_buf
[sizeof(read_data
)];
160 boost::asio::mutable_buffer buffers
161 = boost::asio::buffer(read_buf
, sizeof(read_buf
));
163 s
.reset(read_data
, sizeof(read_data
));
164 memset(read_buf
, 0, sizeof(read_buf
));
165 size_t bytes_transferred
= boost::asio::read(s
, buffers
);
166 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
167 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
169 s
.reset(read_data
, sizeof(read_data
));
170 s
.next_read_length(1);
171 memset(read_buf
, 0, sizeof(read_buf
));
172 bytes_transferred
= boost::asio::read(s
, buffers
);
173 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
174 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
176 s
.reset(read_data
, sizeof(read_data
));
177 s
.next_read_length(10);
178 memset(read_buf
, 0, sizeof(read_buf
));
179 bytes_transferred
= boost::asio::read(s
, buffers
);
180 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
181 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
184 void test_2_arg_vector_buffers_read()
186 boost::asio::io_context ioc
;
188 char read_buf
[sizeof(read_data
)];
189 std::vector
<boost::asio::mutable_buffer
> buffers
;
190 buffers
.push_back(boost::asio::buffer(read_buf
, 32));
191 buffers
.push_back(boost::asio::buffer(read_buf
, 39) + 32);
192 buffers
.push_back(boost::asio::buffer(read_buf
) + 39);
194 s
.reset(read_data
, sizeof(read_data
));
195 memset(read_buf
, 0, sizeof(read_buf
));
196 size_t bytes_transferred
= boost::asio::read(s
, buffers
);
197 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
198 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
200 s
.reset(read_data
, sizeof(read_data
));
201 s
.next_read_length(1);
202 memset(read_buf
, 0, sizeof(read_buf
));
203 bytes_transferred
= boost::asio::read(s
, buffers
);
204 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
205 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
207 s
.reset(read_data
, sizeof(read_data
));
208 s
.next_read_length(10);
209 memset(read_buf
, 0, sizeof(read_buf
));
210 bytes_transferred
= boost::asio::read(s
, buffers
);
211 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
212 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
215 void test_2_arg_dynamic_string_read()
217 boost::asio::io_context ioc
;
220 boost::asio::dynamic_string_buffer
<char, std::string::traits_type
,
221 std::string::allocator_type
> sb
222 = boost::asio::dynamic_buffer(data
, sizeof(read_data
));
224 s
.reset(read_data
, sizeof(read_data
));
225 sb
.consume(sb
.size());
226 size_t bytes_transferred
= boost::asio::read(s
, sb
);
227 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
228 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
229 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
231 s
.reset(read_data
, sizeof(read_data
));
232 s
.next_read_length(1);
233 sb
.consume(sb
.size());
234 bytes_transferred
= boost::asio::read(s
, sb
);
235 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
236 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
237 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
239 s
.reset(read_data
, sizeof(read_data
));
240 s
.next_read_length(10);
241 sb
.consume(sb
.size());
242 bytes_transferred
= boost::asio::read(s
, sb
);
243 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
244 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
245 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
248 void test_2_arg_streambuf_read()
250 #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
251 boost::asio::io_context ioc
;
253 boost::asio::streambuf
sb(sizeof(read_data
));
255 s
.reset(read_data
, sizeof(read_data
));
256 sb
.consume(sb
.size());
257 size_t bytes_transferred
= boost::asio::read(s
, sb
);
258 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
259 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
260 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
262 s
.reset(read_data
, sizeof(read_data
));
263 s
.next_read_length(1);
264 sb
.consume(sb
.size());
265 bytes_transferred
= boost::asio::read(s
, sb
);
266 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
267 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
268 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
270 s
.reset(read_data
, sizeof(read_data
));
271 s
.next_read_length(10);
272 sb
.consume(sb
.size());
273 bytes_transferred
= boost::asio::read(s
, sb
);
274 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
275 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
276 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
277 #endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
280 void test_3_arg_nothrow_zero_buffers_read()
282 boost::asio::io_context ioc
;
284 std::vector
<boost::asio::mutable_buffer
> buffers
;
286 boost::system::error_code error
;
287 size_t bytes_transferred
= boost::asio::read(s
, buffers
, error
);
288 BOOST_ASIO_CHECK(bytes_transferred
== 0);
289 BOOST_ASIO_CHECK(!error
);
292 void test_3_arg_nothrow_mutable_buffer_read()
294 boost::asio::io_context ioc
;
296 char read_buf
[sizeof(read_data
)];
297 boost::asio::mutable_buffer buffers
298 = boost::asio::buffer(read_buf
, sizeof(read_buf
));
300 s
.reset(read_data
, sizeof(read_data
));
301 memset(read_buf
, 0, sizeof(read_buf
));
302 boost::system::error_code error
;
303 size_t bytes_transferred
= boost::asio::read(s
, buffers
, error
);
304 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
305 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
306 BOOST_ASIO_CHECK(!error
);
308 s
.reset(read_data
, sizeof(read_data
));
309 s
.next_read_length(1);
310 memset(read_buf
, 0, sizeof(read_buf
));
311 bytes_transferred
= boost::asio::read(s
, buffers
, error
);
312 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
313 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
314 BOOST_ASIO_CHECK(!error
);
316 s
.reset(read_data
, sizeof(read_data
));
317 s
.next_read_length(10);
318 memset(read_buf
, 0, sizeof(read_buf
));
319 bytes_transferred
= boost::asio::read(s
, buffers
, error
);
320 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
321 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
322 BOOST_ASIO_CHECK(!error
);
325 void test_3_arg_nothrow_vector_buffers_read()
327 boost::asio::io_context ioc
;
329 char read_buf
[sizeof(read_data
)];
330 std::vector
<boost::asio::mutable_buffer
> buffers
;
331 buffers
.push_back(boost::asio::buffer(read_buf
, 32));
332 buffers
.push_back(boost::asio::buffer(read_buf
, 39) + 32);
333 buffers
.push_back(boost::asio::buffer(read_buf
) + 39);
335 s
.reset(read_data
, sizeof(read_data
));
336 memset(read_buf
, 0, sizeof(read_buf
));
337 boost::system::error_code error
;
338 size_t bytes_transferred
= boost::asio::read(s
, buffers
, error
);
339 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
340 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
341 BOOST_ASIO_CHECK(!error
);
343 s
.reset(read_data
, sizeof(read_data
));
344 s
.next_read_length(1);
345 memset(read_buf
, 0, sizeof(read_buf
));
346 bytes_transferred
= boost::asio::read(s
, buffers
, error
);
347 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
348 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
349 BOOST_ASIO_CHECK(!error
);
351 s
.reset(read_data
, sizeof(read_data
));
352 s
.next_read_length(10);
353 memset(read_buf
, 0, sizeof(read_buf
));
354 bytes_transferred
= boost::asio::read(s
, buffers
, error
);
355 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
356 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
357 BOOST_ASIO_CHECK(!error
);
360 void test_3_arg_nothrow_dynamic_string_read()
362 boost::asio::io_context ioc
;
365 boost::asio::dynamic_string_buffer
<char, std::string::traits_type
,
366 std::string::allocator_type
> sb
367 = boost::asio::dynamic_buffer(data
, sizeof(read_data
));
369 s
.reset(read_data
, sizeof(read_data
));
370 sb
.consume(sb
.size());
371 boost::system::error_code error
;
372 size_t bytes_transferred
= boost::asio::read(s
, sb
, error
);
373 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
374 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
375 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
376 BOOST_ASIO_CHECK(!error
);
378 s
.reset(read_data
, sizeof(read_data
));
379 s
.next_read_length(1);
380 sb
.consume(sb
.size());
381 bytes_transferred
= boost::asio::read(s
, sb
, error
);
382 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
383 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
384 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
385 BOOST_ASIO_CHECK(!error
);
387 s
.reset(read_data
, sizeof(read_data
));
388 s
.next_read_length(10);
389 sb
.consume(sb
.size());
390 bytes_transferred
= boost::asio::read(s
, sb
, error
);
391 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
392 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
393 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
394 BOOST_ASIO_CHECK(!error
);
397 void test_3_arg_nothrow_streambuf_read()
399 #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
400 boost::asio::io_context ioc
;
402 boost::asio::streambuf
sb(sizeof(read_data
));
404 s
.reset(read_data
, sizeof(read_data
));
405 sb
.consume(sb
.size());
406 boost::system::error_code error
;
407 size_t bytes_transferred
= boost::asio::read(s
, sb
, error
);
408 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
409 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
410 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
411 BOOST_ASIO_CHECK(!error
);
413 s
.reset(read_data
, sizeof(read_data
));
414 s
.next_read_length(1);
415 sb
.consume(sb
.size());
416 bytes_transferred
= boost::asio::read(s
, sb
, error
);
417 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
418 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
419 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
420 BOOST_ASIO_CHECK(!error
);
422 s
.reset(read_data
, sizeof(read_data
));
423 s
.next_read_length(10);
424 sb
.consume(sb
.size());
425 bytes_transferred
= boost::asio::read(s
, sb
, error
);
426 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
427 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
428 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
429 BOOST_ASIO_CHECK(!error
);
430 #endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
433 bool old_style_transfer_all(const boost::system::error_code
& ec
,
434 size_t /*bytes_transferred*/)
439 struct short_transfer
442 #if defined(BOOST_ASIO_HAS_MOVE)
443 short_transfer(short_transfer
&&) {}
444 #else // defined(BOOST_ASIO_HAS_MOVE)
445 short_transfer(const short_transfer
&) {}
446 #endif // defined(BOOST_ASIO_HAS_MOVE)
447 size_t operator()(const boost::system::error_code
& ec
,
448 size_t /*bytes_transferred*/)
454 void test_3_arg_mutable_buffer_read()
456 boost::asio::io_context ioc
;
458 char read_buf
[sizeof(read_data
)];
459 boost::asio::mutable_buffer buffers
460 = boost::asio::buffer(read_buf
, sizeof(read_buf
));
462 s
.reset(read_data
, sizeof(read_data
));
463 memset(read_buf
, 0, sizeof(read_buf
));
464 size_t bytes_transferred
= boost::asio::read(s
, buffers
,
465 boost::asio::transfer_all());
466 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
467 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
469 s
.reset(read_data
, sizeof(read_data
));
470 s
.next_read_length(1);
471 memset(read_buf
, 0, sizeof(read_buf
));
472 bytes_transferred
= boost::asio::read(s
, buffers
,
473 boost::asio::transfer_all());
474 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
475 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
477 s
.reset(read_data
, sizeof(read_data
));
478 s
.next_read_length(10);
479 memset(read_buf
, 0, sizeof(read_buf
));
480 bytes_transferred
= boost::asio::read(s
, buffers
,
481 boost::asio::transfer_all());
482 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
483 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
485 s
.reset(read_data
, sizeof(read_data
));
486 memset(read_buf
, 0, sizeof(read_buf
));
487 bytes_transferred
= boost::asio::read(s
, buffers
,
488 boost::asio::transfer_at_least(1));
489 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
490 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
492 s
.reset(read_data
, sizeof(read_data
));
493 s
.next_read_length(1);
494 memset(read_buf
, 0, sizeof(read_buf
));
495 bytes_transferred
= boost::asio::read(s
, buffers
,
496 boost::asio::transfer_at_least(1));
497 BOOST_ASIO_CHECK(bytes_transferred
== 1);
498 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
500 s
.reset(read_data
, sizeof(read_data
));
501 s
.next_read_length(10);
502 memset(read_buf
, 0, sizeof(read_buf
));
503 bytes_transferred
= boost::asio::read(s
, buffers
,
504 boost::asio::transfer_at_least(1));
505 BOOST_ASIO_CHECK(bytes_transferred
== 10);
506 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
508 s
.reset(read_data
, sizeof(read_data
));
509 memset(read_buf
, 0, sizeof(read_buf
));
510 bytes_transferred
= boost::asio::read(s
, buffers
,
511 boost::asio::transfer_at_least(10));
512 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
513 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
515 s
.reset(read_data
, sizeof(read_data
));
516 s
.next_read_length(1);
517 memset(read_buf
, 0, sizeof(read_buf
));
518 bytes_transferred
= boost::asio::read(s
, buffers
,
519 boost::asio::transfer_at_least(10));
520 BOOST_ASIO_CHECK(bytes_transferred
== 10);
521 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
523 s
.reset(read_data
, sizeof(read_data
));
524 s
.next_read_length(10);
525 memset(read_buf
, 0, sizeof(read_buf
));
526 bytes_transferred
= boost::asio::read(s
, buffers
,
527 boost::asio::transfer_at_least(10));
528 BOOST_ASIO_CHECK(bytes_transferred
== 10);
529 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
531 s
.reset(read_data
, sizeof(read_data
));
532 memset(read_buf
, 0, sizeof(read_buf
));
533 bytes_transferred
= boost::asio::read(s
, buffers
,
534 boost::asio::transfer_at_least(42));
535 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
536 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
538 s
.reset(read_data
, sizeof(read_data
));
539 s
.next_read_length(1);
540 memset(read_buf
, 0, sizeof(read_buf
));
541 bytes_transferred
= boost::asio::read(s
, buffers
,
542 boost::asio::transfer_at_least(42));
543 BOOST_ASIO_CHECK(bytes_transferred
== 42);
544 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
546 s
.reset(read_data
, sizeof(read_data
));
547 s
.next_read_length(10);
548 memset(read_buf
, 0, sizeof(read_buf
));
549 bytes_transferred
= boost::asio::read(s
, buffers
,
550 boost::asio::transfer_at_least(42));
551 BOOST_ASIO_CHECK(bytes_transferred
== 50);
552 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 50));
554 s
.reset(read_data
, sizeof(read_data
));
555 memset(read_buf
, 0, sizeof(read_buf
));
556 bytes_transferred
= boost::asio::read(s
, buffers
,
557 boost::asio::transfer_exactly(1));
558 BOOST_ASIO_CHECK(bytes_transferred
== 1);
559 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
561 s
.reset(read_data
, sizeof(read_data
));
562 s
.next_read_length(1);
563 memset(read_buf
, 0, sizeof(read_buf
));
564 bytes_transferred
= boost::asio::read(s
, buffers
,
565 boost::asio::transfer_exactly(1));
566 BOOST_ASIO_CHECK(bytes_transferred
== 1);
567 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
569 s
.reset(read_data
, sizeof(read_data
));
570 s
.next_read_length(10);
571 memset(read_buf
, 0, sizeof(read_buf
));
572 bytes_transferred
= boost::asio::read(s
, buffers
,
573 boost::asio::transfer_exactly(1));
574 BOOST_ASIO_CHECK(bytes_transferred
== 1);
575 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
577 s
.reset(read_data
, sizeof(read_data
));
578 memset(read_buf
, 0, sizeof(read_buf
));
579 bytes_transferred
= boost::asio::read(s
, buffers
,
580 boost::asio::transfer_exactly(10));
581 BOOST_ASIO_CHECK(bytes_transferred
== 10);
582 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
584 s
.reset(read_data
, sizeof(read_data
));
585 s
.next_read_length(1);
586 memset(read_buf
, 0, sizeof(read_buf
));
587 bytes_transferred
= boost::asio::read(s
, buffers
,
588 boost::asio::transfer_exactly(10));
589 BOOST_ASIO_CHECK(bytes_transferred
== 10);
590 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
592 s
.reset(read_data
, sizeof(read_data
));
593 s
.next_read_length(10);
594 memset(read_buf
, 0, sizeof(read_buf
));
595 bytes_transferred
= boost::asio::read(s
, buffers
,
596 boost::asio::transfer_exactly(10));
597 BOOST_ASIO_CHECK(bytes_transferred
== 10);
598 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
600 s
.reset(read_data
, sizeof(read_data
));
601 memset(read_buf
, 0, sizeof(read_buf
));
602 bytes_transferred
= boost::asio::read(s
, buffers
,
603 boost::asio::transfer_exactly(42));
604 BOOST_ASIO_CHECK(bytes_transferred
== 42);
605 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
607 s
.reset(read_data
, sizeof(read_data
));
608 s
.next_read_length(1);
609 memset(read_buf
, 0, sizeof(read_buf
));
610 bytes_transferred
= boost::asio::read(s
, buffers
,
611 boost::asio::transfer_exactly(42));
612 BOOST_ASIO_CHECK(bytes_transferred
== 42);
613 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
615 s
.reset(read_data
, sizeof(read_data
));
616 s
.next_read_length(10);
617 memset(read_buf
, 0, sizeof(read_buf
));
618 bytes_transferred
= boost::asio::read(s
, buffers
,
619 boost::asio::transfer_exactly(42));
620 BOOST_ASIO_CHECK(bytes_transferred
== 42);
621 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
623 s
.reset(read_data
, sizeof(read_data
));
624 memset(read_buf
, 0, sizeof(read_buf
));
625 bytes_transferred
= boost::asio::read(s
, buffers
, old_style_transfer_all
);
626 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
627 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
629 s
.reset(read_data
, sizeof(read_data
));
630 s
.next_read_length(1);
631 memset(read_buf
, 0, sizeof(read_buf
));
632 bytes_transferred
= boost::asio::read(s
, buffers
, old_style_transfer_all
);
633 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
634 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
636 s
.reset(read_data
, sizeof(read_data
));
637 s
.next_read_length(10);
638 memset(read_buf
, 0, sizeof(read_buf
));
639 bytes_transferred
= boost::asio::read(s
, buffers
, old_style_transfer_all
);
640 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
641 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
643 s
.reset(read_data
, sizeof(read_data
));
644 memset(read_buf
, 0, sizeof(read_buf
));
645 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer());
646 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
647 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
649 s
.reset(read_data
, sizeof(read_data
));
650 s
.next_read_length(1);
651 memset(read_buf
, 0, sizeof(read_buf
));
652 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer());
653 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
654 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
656 s
.reset(read_data
, sizeof(read_data
));
657 s
.next_read_length(10);
658 memset(read_buf
, 0, sizeof(read_buf
));
659 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer());
660 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
661 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
664 void test_3_arg_vector_buffers_read()
666 boost::asio::io_context ioc
;
668 char read_buf
[sizeof(read_data
)];
669 std::vector
<boost::asio::mutable_buffer
> buffers
;
670 buffers
.push_back(boost::asio::buffer(read_buf
, 32));
671 buffers
.push_back(boost::asio::buffer(read_buf
, 39) + 32);
672 buffers
.push_back(boost::asio::buffer(read_buf
) + 39);
674 s
.reset(read_data
, sizeof(read_data
));
675 memset(read_buf
, 0, sizeof(read_buf
));
676 size_t bytes_transferred
= boost::asio::read(s
, buffers
,
677 boost::asio::transfer_all());
678 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
679 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
681 s
.reset(read_data
, sizeof(read_data
));
682 s
.next_read_length(1);
683 memset(read_buf
, 0, sizeof(read_buf
));
684 bytes_transferred
= boost::asio::read(s
, buffers
,
685 boost::asio::transfer_all());
686 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
687 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
689 s
.reset(read_data
, sizeof(read_data
));
690 s
.next_read_length(10);
691 memset(read_buf
, 0, sizeof(read_buf
));
692 bytes_transferred
= boost::asio::read(s
, buffers
,
693 boost::asio::transfer_all());
694 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
695 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
697 s
.reset(read_data
, sizeof(read_data
));
698 memset(read_buf
, 0, sizeof(read_buf
));
699 bytes_transferred
= boost::asio::read(s
, buffers
,
700 boost::asio::transfer_at_least(1));
701 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
702 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
704 s
.reset(read_data
, sizeof(read_data
));
705 s
.next_read_length(1);
706 memset(read_buf
, 0, sizeof(read_buf
));
707 bytes_transferred
= boost::asio::read(s
, buffers
,
708 boost::asio::transfer_at_least(1));
709 BOOST_ASIO_CHECK(bytes_transferred
== 1);
710 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
712 s
.reset(read_data
, sizeof(read_data
));
713 s
.next_read_length(10);
714 memset(read_buf
, 0, sizeof(read_buf
));
715 bytes_transferred
= boost::asio::read(s
, buffers
,
716 boost::asio::transfer_at_least(1));
717 BOOST_ASIO_CHECK(bytes_transferred
== 10);
718 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
720 s
.reset(read_data
, sizeof(read_data
));
721 memset(read_buf
, 0, sizeof(read_buf
));
722 bytes_transferred
= boost::asio::read(s
, buffers
,
723 boost::asio::transfer_at_least(10));
724 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
725 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
727 s
.reset(read_data
, sizeof(read_data
));
728 s
.next_read_length(1);
729 memset(read_buf
, 0, sizeof(read_buf
));
730 bytes_transferred
= boost::asio::read(s
, buffers
,
731 boost::asio::transfer_at_least(10));
732 BOOST_ASIO_CHECK(bytes_transferred
== 10);
733 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
735 s
.reset(read_data
, sizeof(read_data
));
736 s
.next_read_length(10);
737 memset(read_buf
, 0, sizeof(read_buf
));
738 bytes_transferred
= boost::asio::read(s
, buffers
,
739 boost::asio::transfer_at_least(10));
740 BOOST_ASIO_CHECK(bytes_transferred
== 10);
741 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
743 s
.reset(read_data
, sizeof(read_data
));
744 memset(read_buf
, 0, sizeof(read_buf
));
745 bytes_transferred
= boost::asio::read(s
, buffers
,
746 boost::asio::transfer_at_least(42));
747 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
748 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
750 s
.reset(read_data
, sizeof(read_data
));
751 s
.next_read_length(1);
752 memset(read_buf
, 0, sizeof(read_buf
));
753 bytes_transferred
= boost::asio::read(s
, buffers
,
754 boost::asio::transfer_at_least(42));
755 BOOST_ASIO_CHECK(bytes_transferred
== 42);
756 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
758 s
.reset(read_data
, sizeof(read_data
));
759 s
.next_read_length(10);
760 memset(read_buf
, 0, sizeof(read_buf
));
761 bytes_transferred
= boost::asio::read(s
, buffers
,
762 boost::asio::transfer_at_least(42));
763 BOOST_ASIO_CHECK(bytes_transferred
== 50);
764 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 50));
766 s
.reset(read_data
, sizeof(read_data
));
767 memset(read_buf
, 0, sizeof(read_buf
));
768 bytes_transferred
= boost::asio::read(s
, buffers
,
769 boost::asio::transfer_exactly(1));
770 BOOST_ASIO_CHECK(bytes_transferred
== 1);
771 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
773 s
.reset(read_data
, sizeof(read_data
));
774 s
.next_read_length(1);
775 memset(read_buf
, 0, sizeof(read_buf
));
776 bytes_transferred
= boost::asio::read(s
, buffers
,
777 boost::asio::transfer_exactly(1));
778 BOOST_ASIO_CHECK(bytes_transferred
== 1);
779 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
781 s
.reset(read_data
, sizeof(read_data
));
782 s
.next_read_length(10);
783 memset(read_buf
, 0, sizeof(read_buf
));
784 bytes_transferred
= boost::asio::read(s
, buffers
,
785 boost::asio::transfer_exactly(1));
786 BOOST_ASIO_CHECK(bytes_transferred
== 1);
787 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
789 s
.reset(read_data
, sizeof(read_data
));
790 memset(read_buf
, 0, sizeof(read_buf
));
791 bytes_transferred
= boost::asio::read(s
, buffers
,
792 boost::asio::transfer_exactly(10));
793 BOOST_ASIO_CHECK(bytes_transferred
== 10);
794 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
796 s
.reset(read_data
, sizeof(read_data
));
797 s
.next_read_length(1);
798 memset(read_buf
, 0, sizeof(read_buf
));
799 bytes_transferred
= boost::asio::read(s
, buffers
,
800 boost::asio::transfer_exactly(10));
801 BOOST_ASIO_CHECK(bytes_transferred
== 10);
802 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
804 s
.reset(read_data
, sizeof(read_data
));
805 s
.next_read_length(10);
806 memset(read_buf
, 0, sizeof(read_buf
));
807 bytes_transferred
= boost::asio::read(s
, buffers
,
808 boost::asio::transfer_exactly(10));
809 BOOST_ASIO_CHECK(bytes_transferred
== 10);
810 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
812 s
.reset(read_data
, sizeof(read_data
));
813 memset(read_buf
, 0, sizeof(read_buf
));
814 bytes_transferred
= boost::asio::read(s
, buffers
,
815 boost::asio::transfer_exactly(42));
816 BOOST_ASIO_CHECK(bytes_transferred
== 42);
817 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
819 s
.reset(read_data
, sizeof(read_data
));
820 s
.next_read_length(1);
821 memset(read_buf
, 0, sizeof(read_buf
));
822 bytes_transferred
= boost::asio::read(s
, buffers
,
823 boost::asio::transfer_exactly(42));
824 BOOST_ASIO_CHECK(bytes_transferred
== 42);
825 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
827 s
.reset(read_data
, sizeof(read_data
));
828 s
.next_read_length(10);
829 memset(read_buf
, 0, sizeof(read_buf
));
830 bytes_transferred
= boost::asio::read(s
, buffers
,
831 boost::asio::transfer_exactly(42));
832 BOOST_ASIO_CHECK(bytes_transferred
== 42);
833 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
835 s
.reset(read_data
, sizeof(read_data
));
836 memset(read_buf
, 0, sizeof(read_buf
));
837 bytes_transferred
= boost::asio::read(s
, buffers
, old_style_transfer_all
);
838 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
839 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
841 s
.reset(read_data
, sizeof(read_data
));
842 s
.next_read_length(1);
843 memset(read_buf
, 0, sizeof(read_buf
));
844 bytes_transferred
= boost::asio::read(s
, buffers
, old_style_transfer_all
);
845 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
846 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
848 s
.reset(read_data
, sizeof(read_data
));
849 s
.next_read_length(10);
850 memset(read_buf
, 0, sizeof(read_buf
));
851 bytes_transferred
= boost::asio::read(s
, buffers
, old_style_transfer_all
);
852 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
853 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
855 s
.reset(read_data
, sizeof(read_data
));
856 memset(read_buf
, 0, sizeof(read_buf
));
857 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer());
858 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
859 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
861 s
.reset(read_data
, sizeof(read_data
));
862 s
.next_read_length(1);
863 memset(read_buf
, 0, sizeof(read_buf
));
864 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer());
865 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
866 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
868 s
.reset(read_data
, sizeof(read_data
));
869 s
.next_read_length(10);
870 memset(read_buf
, 0, sizeof(read_buf
));
871 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer());
872 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
873 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
876 void test_3_arg_dynamic_string_read()
878 boost::asio::io_context ioc
;
881 boost::asio::dynamic_string_buffer
<char, std::string::traits_type
,
882 std::string::allocator_type
> sb
883 = boost::asio::dynamic_buffer(data
, sizeof(read_data
));
885 s
.reset(read_data
, sizeof(read_data
));
886 sb
.consume(sb
.size());
887 size_t bytes_transferred
= boost::asio::read(s
, sb
,
888 boost::asio::transfer_all());
889 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
890 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
891 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
893 s
.reset(read_data
, sizeof(read_data
));
894 s
.next_read_length(1);
895 sb
.consume(sb
.size());
896 bytes_transferred
= boost::asio::read(s
, sb
,
897 boost::asio::transfer_all());
898 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
899 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
900 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
902 s
.reset(read_data
, sizeof(read_data
));
903 s
.next_read_length(10);
904 sb
.consume(sb
.size());
905 bytes_transferred
= boost::asio::read(s
, sb
,
906 boost::asio::transfer_all());
907 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
908 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
909 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
911 s
.reset(read_data
, sizeof(read_data
));
912 sb
.consume(sb
.size());
913 bytes_transferred
= boost::asio::read(s
, sb
,
914 boost::asio::transfer_at_least(1));
915 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
916 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
917 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
919 s
.reset(read_data
, sizeof(read_data
));
920 s
.next_read_length(1);
921 sb
.consume(sb
.size());
922 bytes_transferred
= boost::asio::read(s
, sb
,
923 boost::asio::transfer_at_least(1));
924 BOOST_ASIO_CHECK(bytes_transferred
== 1);
925 BOOST_ASIO_CHECK(sb
.size() == 1);
926 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
928 s
.reset(read_data
, sizeof(read_data
));
929 s
.next_read_length(10);
930 sb
.consume(sb
.size());
931 bytes_transferred
= boost::asio::read(s
, sb
,
932 boost::asio::transfer_at_least(1));
933 BOOST_ASIO_CHECK(bytes_transferred
== 10);
934 BOOST_ASIO_CHECK(sb
.size() == 10);
935 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
937 s
.reset(read_data
, sizeof(read_data
));
938 sb
.consume(sb
.size());
939 bytes_transferred
= boost::asio::read(s
, sb
,
940 boost::asio::transfer_at_least(10));
941 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
942 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
943 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
945 s
.reset(read_data
, sizeof(read_data
));
946 s
.next_read_length(1);
947 sb
.consume(sb
.size());
948 bytes_transferred
= boost::asio::read(s
, sb
,
949 boost::asio::transfer_at_least(10));
950 BOOST_ASIO_CHECK(bytes_transferred
== 10);
951 BOOST_ASIO_CHECK(sb
.size() == 10);
952 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
954 s
.reset(read_data
, sizeof(read_data
));
955 s
.next_read_length(10);
956 sb
.consume(sb
.size());
957 bytes_transferred
= boost::asio::read(s
, sb
,
958 boost::asio::transfer_at_least(10));
959 BOOST_ASIO_CHECK(bytes_transferred
== 10);
960 BOOST_ASIO_CHECK(sb
.size() == 10);
961 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
963 s
.reset(read_data
, sizeof(read_data
));
964 sb
.consume(sb
.size());
965 bytes_transferred
= boost::asio::read(s
, sb
,
966 boost::asio::transfer_at_least(42));
967 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
968 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
969 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
971 s
.reset(read_data
, sizeof(read_data
));
972 s
.next_read_length(1);
973 sb
.consume(sb
.size());
974 bytes_transferred
= boost::asio::read(s
, sb
,
975 boost::asio::transfer_at_least(42));
976 BOOST_ASIO_CHECK(bytes_transferred
== 42);
977 BOOST_ASIO_CHECK(sb
.size() == 42);
978 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
980 s
.reset(read_data
, sizeof(read_data
));
981 s
.next_read_length(10);
982 sb
.consume(sb
.size());
983 bytes_transferred
= boost::asio::read(s
, sb
,
984 boost::asio::transfer_at_least(42));
985 BOOST_ASIO_CHECK(bytes_transferred
== 50);
986 BOOST_ASIO_CHECK(sb
.size() == 50);
987 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 50));
989 s
.reset(read_data
, sizeof(read_data
));
990 sb
.consume(sb
.size());
991 bytes_transferred
= boost::asio::read(s
, sb
,
992 boost::asio::transfer_exactly(1));
993 BOOST_ASIO_CHECK(bytes_transferred
== 1);
994 BOOST_ASIO_CHECK(sb
.size() == 1);
995 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
997 s
.reset(read_data
, sizeof(read_data
));
998 s
.next_read_length(1);
999 sb
.consume(sb
.size());
1000 bytes_transferred
= boost::asio::read(s
, sb
,
1001 boost::asio::transfer_exactly(1));
1002 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1003 BOOST_ASIO_CHECK(sb
.size() == 1);
1004 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
1006 s
.reset(read_data
, sizeof(read_data
));
1007 s
.next_read_length(10);
1008 sb
.consume(sb
.size());
1009 bytes_transferred
= boost::asio::read(s
, sb
,
1010 boost::asio::transfer_exactly(1));
1011 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1012 BOOST_ASIO_CHECK(sb
.size() == 1);
1013 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
1015 s
.reset(read_data
, sizeof(read_data
));
1016 sb
.consume(sb
.size());
1017 bytes_transferred
= boost::asio::read(s
, sb
,
1018 boost::asio::transfer_exactly(10));
1019 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1020 BOOST_ASIO_CHECK(sb
.size() == 10);
1021 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
1023 s
.reset(read_data
, sizeof(read_data
));
1024 s
.next_read_length(1);
1025 sb
.consume(sb
.size());
1026 bytes_transferred
= boost::asio::read(s
, sb
,
1027 boost::asio::transfer_exactly(10));
1028 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1029 BOOST_ASIO_CHECK(sb
.size() == 10);
1030 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
1032 s
.reset(read_data
, sizeof(read_data
));
1033 s
.next_read_length(10);
1034 sb
.consume(sb
.size());
1035 bytes_transferred
= boost::asio::read(s
, sb
,
1036 boost::asio::transfer_exactly(10));
1037 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1038 BOOST_ASIO_CHECK(sb
.size() == 10);
1039 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
1041 s
.reset(read_data
, sizeof(read_data
));
1042 sb
.consume(sb
.size());
1043 bytes_transferred
= boost::asio::read(s
, sb
,
1044 boost::asio::transfer_exactly(42));
1045 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1046 BOOST_ASIO_CHECK(sb
.size() == 42);
1047 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
1049 s
.reset(read_data
, sizeof(read_data
));
1050 s
.next_read_length(1);
1051 sb
.consume(sb
.size());
1052 bytes_transferred
= boost::asio::read(s
, sb
,
1053 boost::asio::transfer_exactly(42));
1054 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1055 BOOST_ASIO_CHECK(sb
.size() == 42);
1056 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
1058 s
.reset(read_data
, sizeof(read_data
));
1059 s
.next_read_length(10);
1060 sb
.consume(sb
.size());
1061 bytes_transferred
= boost::asio::read(s
, sb
,
1062 boost::asio::transfer_exactly(42));
1063 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1064 BOOST_ASIO_CHECK(sb
.size() == 42);
1065 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
1067 s
.reset(read_data
, sizeof(read_data
));
1068 sb
.consume(sb
.size());
1069 bytes_transferred
= boost::asio::read(s
, sb
, old_style_transfer_all
);
1070 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1071 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1072 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1074 s
.reset(read_data
, sizeof(read_data
));
1075 s
.next_read_length(1);
1076 sb
.consume(sb
.size());
1077 bytes_transferred
= boost::asio::read(s
, sb
, old_style_transfer_all
);
1078 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1079 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1080 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1082 s
.reset(read_data
, sizeof(read_data
));
1083 s
.next_read_length(10);
1084 sb
.consume(sb
.size());
1085 bytes_transferred
= boost::asio::read(s
, sb
, old_style_transfer_all
);
1086 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1087 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1088 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1090 s
.reset(read_data
, sizeof(read_data
));
1091 sb
.consume(sb
.size());
1092 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer());
1093 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1094 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1095 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1097 s
.reset(read_data
, sizeof(read_data
));
1098 s
.next_read_length(1);
1099 sb
.consume(sb
.size());
1100 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer());
1101 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1102 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1103 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1105 s
.reset(read_data
, sizeof(read_data
));
1106 s
.next_read_length(10);
1107 sb
.consume(sb
.size());
1108 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer());
1109 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1110 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1111 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1114 void test_3_arg_streambuf_read()
1116 #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
1117 boost::asio::io_context ioc
;
1119 boost::asio::streambuf
sb(sizeof(read_data
));
1121 s
.reset(read_data
, sizeof(read_data
));
1122 sb
.consume(sb
.size());
1123 size_t bytes_transferred
= boost::asio::read(s
, sb
,
1124 boost::asio::transfer_all());
1125 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1126 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1127 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1129 s
.reset(read_data
, sizeof(read_data
));
1130 s
.next_read_length(1);
1131 sb
.consume(sb
.size());
1132 bytes_transferred
= boost::asio::read(s
, sb
,
1133 boost::asio::transfer_all());
1134 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1135 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1136 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1138 s
.reset(read_data
, sizeof(read_data
));
1139 s
.next_read_length(10);
1140 sb
.consume(sb
.size());
1141 bytes_transferred
= boost::asio::read(s
, sb
,
1142 boost::asio::transfer_all());
1143 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1144 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1145 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1147 s
.reset(read_data
, sizeof(read_data
));
1148 sb
.consume(sb
.size());
1149 bytes_transferred
= boost::asio::read(s
, sb
,
1150 boost::asio::transfer_at_least(1));
1151 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1152 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1153 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1155 s
.reset(read_data
, sizeof(read_data
));
1156 s
.next_read_length(1);
1157 sb
.consume(sb
.size());
1158 bytes_transferred
= boost::asio::read(s
, sb
,
1159 boost::asio::transfer_at_least(1));
1160 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1161 BOOST_ASIO_CHECK(sb
.size() == 1);
1162 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
1164 s
.reset(read_data
, sizeof(read_data
));
1165 s
.next_read_length(10);
1166 sb
.consume(sb
.size());
1167 bytes_transferred
= boost::asio::read(s
, sb
,
1168 boost::asio::transfer_at_least(1));
1169 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1170 BOOST_ASIO_CHECK(sb
.size() == 10);
1171 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
1173 s
.reset(read_data
, sizeof(read_data
));
1174 sb
.consume(sb
.size());
1175 bytes_transferred
= boost::asio::read(s
, sb
,
1176 boost::asio::transfer_at_least(10));
1177 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1178 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1179 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1181 s
.reset(read_data
, sizeof(read_data
));
1182 s
.next_read_length(1);
1183 sb
.consume(sb
.size());
1184 bytes_transferred
= boost::asio::read(s
, sb
,
1185 boost::asio::transfer_at_least(10));
1186 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1187 BOOST_ASIO_CHECK(sb
.size() == 10);
1188 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
1190 s
.reset(read_data
, sizeof(read_data
));
1191 s
.next_read_length(10);
1192 sb
.consume(sb
.size());
1193 bytes_transferred
= boost::asio::read(s
, sb
,
1194 boost::asio::transfer_at_least(10));
1195 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1196 BOOST_ASIO_CHECK(sb
.size() == 10);
1197 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
1199 s
.reset(read_data
, sizeof(read_data
));
1200 sb
.consume(sb
.size());
1201 bytes_transferred
= boost::asio::read(s
, sb
,
1202 boost::asio::transfer_at_least(42));
1203 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1204 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1205 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1207 s
.reset(read_data
, sizeof(read_data
));
1208 s
.next_read_length(1);
1209 sb
.consume(sb
.size());
1210 bytes_transferred
= boost::asio::read(s
, sb
,
1211 boost::asio::transfer_at_least(42));
1212 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1213 BOOST_ASIO_CHECK(sb
.size() == 42);
1214 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
1216 s
.reset(read_data
, sizeof(read_data
));
1217 s
.next_read_length(10);
1218 sb
.consume(sb
.size());
1219 bytes_transferred
= boost::asio::read(s
, sb
,
1220 boost::asio::transfer_at_least(42));
1221 BOOST_ASIO_CHECK(bytes_transferred
== 50);
1222 BOOST_ASIO_CHECK(sb
.size() == 50);
1223 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 50));
1225 s
.reset(read_data
, sizeof(read_data
));
1226 sb
.consume(sb
.size());
1227 bytes_transferred
= boost::asio::read(s
, sb
,
1228 boost::asio::transfer_exactly(1));
1229 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1230 BOOST_ASIO_CHECK(sb
.size() == 1);
1231 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
1233 s
.reset(read_data
, sizeof(read_data
));
1234 s
.next_read_length(1);
1235 sb
.consume(sb
.size());
1236 bytes_transferred
= boost::asio::read(s
, sb
,
1237 boost::asio::transfer_exactly(1));
1238 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1239 BOOST_ASIO_CHECK(sb
.size() == 1);
1240 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
1242 s
.reset(read_data
, sizeof(read_data
));
1243 s
.next_read_length(10);
1244 sb
.consume(sb
.size());
1245 bytes_transferred
= boost::asio::read(s
, sb
,
1246 boost::asio::transfer_exactly(1));
1247 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1248 BOOST_ASIO_CHECK(sb
.size() == 1);
1249 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
1251 s
.reset(read_data
, sizeof(read_data
));
1252 sb
.consume(sb
.size());
1253 bytes_transferred
= boost::asio::read(s
, sb
,
1254 boost::asio::transfer_exactly(10));
1255 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1256 BOOST_ASIO_CHECK(sb
.size() == 10);
1257 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
1259 s
.reset(read_data
, sizeof(read_data
));
1260 s
.next_read_length(1);
1261 sb
.consume(sb
.size());
1262 bytes_transferred
= boost::asio::read(s
, sb
,
1263 boost::asio::transfer_exactly(10));
1264 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1265 BOOST_ASIO_CHECK(sb
.size() == 10);
1266 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
1268 s
.reset(read_data
, sizeof(read_data
));
1269 s
.next_read_length(10);
1270 sb
.consume(sb
.size());
1271 bytes_transferred
= boost::asio::read(s
, sb
,
1272 boost::asio::transfer_exactly(10));
1273 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1274 BOOST_ASIO_CHECK(sb
.size() == 10);
1275 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
1277 s
.reset(read_data
, sizeof(read_data
));
1278 sb
.consume(sb
.size());
1279 bytes_transferred
= boost::asio::read(s
, sb
,
1280 boost::asio::transfer_exactly(42));
1281 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1282 BOOST_ASIO_CHECK(sb
.size() == 42);
1283 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
1285 s
.reset(read_data
, sizeof(read_data
));
1286 s
.next_read_length(1);
1287 sb
.consume(sb
.size());
1288 bytes_transferred
= boost::asio::read(s
, sb
,
1289 boost::asio::transfer_exactly(42));
1290 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1291 BOOST_ASIO_CHECK(sb
.size() == 42);
1292 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
1294 s
.reset(read_data
, sizeof(read_data
));
1295 s
.next_read_length(10);
1296 sb
.consume(sb
.size());
1297 bytes_transferred
= boost::asio::read(s
, sb
,
1298 boost::asio::transfer_exactly(42));
1299 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1300 BOOST_ASIO_CHECK(sb
.size() == 42);
1301 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
1303 s
.reset(read_data
, sizeof(read_data
));
1304 sb
.consume(sb
.size());
1305 bytes_transferred
= boost::asio::read(s
, sb
, old_style_transfer_all
);
1306 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1307 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1308 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1310 s
.reset(read_data
, sizeof(read_data
));
1311 s
.next_read_length(1);
1312 sb
.consume(sb
.size());
1313 bytes_transferred
= boost::asio::read(s
, sb
, old_style_transfer_all
);
1314 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1315 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1316 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1318 s
.reset(read_data
, sizeof(read_data
));
1319 s
.next_read_length(10);
1320 sb
.consume(sb
.size());
1321 bytes_transferred
= boost::asio::read(s
, sb
, old_style_transfer_all
);
1322 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1323 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1324 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1326 s
.reset(read_data
, sizeof(read_data
));
1327 sb
.consume(sb
.size());
1328 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer());
1329 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1330 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1331 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1333 s
.reset(read_data
, sizeof(read_data
));
1334 s
.next_read_length(1);
1335 sb
.consume(sb
.size());
1336 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer());
1337 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1338 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1339 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1341 s
.reset(read_data
, sizeof(read_data
));
1342 s
.next_read_length(10);
1343 sb
.consume(sb
.size());
1344 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer());
1345 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1346 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1347 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
1348 #endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
1351 void test_4_arg_mutable_buffer_read()
1353 boost::asio::io_context ioc
;
1355 char read_buf
[sizeof(read_data
)];
1356 boost::asio::mutable_buffer buffers
1357 = boost::asio::buffer(read_buf
, sizeof(read_buf
));
1359 s
.reset(read_data
, sizeof(read_data
));
1360 memset(read_buf
, 0, sizeof(read_buf
));
1361 boost::system::error_code error
;
1362 size_t bytes_transferred
= boost::asio::read(s
, buffers
,
1363 boost::asio::transfer_all(), error
);
1364 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1365 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1366 BOOST_ASIO_CHECK(!error
);
1368 s
.reset(read_data
, sizeof(read_data
));
1369 s
.next_read_length(1);
1370 memset(read_buf
, 0, sizeof(read_buf
));
1371 error
= boost::system::error_code();
1372 bytes_transferred
= boost::asio::read(s
, buffers
,
1373 boost::asio::transfer_all(), error
);
1374 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1375 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1376 BOOST_ASIO_CHECK(!error
);
1378 s
.reset(read_data
, sizeof(read_data
));
1379 s
.next_read_length(10);
1380 memset(read_buf
, 0, sizeof(read_buf
));
1381 error
= boost::system::error_code();
1382 bytes_transferred
= boost::asio::read(s
, buffers
,
1383 boost::asio::transfer_all(), error
);
1384 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1385 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1386 BOOST_ASIO_CHECK(!error
);
1388 s
.reset(read_data
, sizeof(read_data
));
1389 memset(read_buf
, 0, sizeof(read_buf
));
1390 error
= boost::system::error_code();
1391 bytes_transferred
= boost::asio::read(s
, buffers
,
1392 boost::asio::transfer_at_least(1), error
);
1393 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1394 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1395 BOOST_ASIO_CHECK(!error
);
1397 s
.reset(read_data
, sizeof(read_data
));
1398 s
.next_read_length(1);
1399 memset(read_buf
, 0, sizeof(read_buf
));
1400 error
= boost::system::error_code();
1401 bytes_transferred
= boost::asio::read(s
, buffers
,
1402 boost::asio::transfer_at_least(1), error
);
1403 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1404 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
1405 BOOST_ASIO_CHECK(!error
);
1407 s
.reset(read_data
, sizeof(read_data
));
1408 s
.next_read_length(10);
1409 memset(read_buf
, 0, sizeof(read_buf
));
1410 error
= boost::system::error_code();
1411 bytes_transferred
= boost::asio::read(s
, buffers
,
1412 boost::asio::transfer_at_least(1), error
);
1413 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1414 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1415 BOOST_ASIO_CHECK(!error
);
1417 s
.reset(read_data
, sizeof(read_data
));
1418 memset(read_buf
, 0, sizeof(read_buf
));
1419 error
= boost::system::error_code();
1420 bytes_transferred
= boost::asio::read(s
, buffers
,
1421 boost::asio::transfer_at_least(10), error
);
1422 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1423 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1424 BOOST_ASIO_CHECK(!error
);
1426 s
.reset(read_data
, sizeof(read_data
));
1427 s
.next_read_length(1);
1428 memset(read_buf
, 0, sizeof(read_buf
));
1429 error
= boost::system::error_code();
1430 bytes_transferred
= boost::asio::read(s
, buffers
,
1431 boost::asio::transfer_at_least(10), error
);
1432 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1433 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1434 BOOST_ASIO_CHECK(!error
);
1436 s
.reset(read_data
, sizeof(read_data
));
1437 s
.next_read_length(10);
1438 memset(read_buf
, 0, sizeof(read_buf
));
1439 error
= boost::system::error_code();
1440 bytes_transferred
= boost::asio::read(s
, buffers
,
1441 boost::asio::transfer_at_least(10), error
);
1442 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1443 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1444 BOOST_ASIO_CHECK(!error
);
1446 s
.reset(read_data
, sizeof(read_data
));
1447 memset(read_buf
, 0, sizeof(read_buf
));
1448 error
= boost::system::error_code();
1449 bytes_transferred
= boost::asio::read(s
, buffers
,
1450 boost::asio::transfer_at_least(42), error
);
1451 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1452 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1453 BOOST_ASIO_CHECK(!error
);
1455 s
.reset(read_data
, sizeof(read_data
));
1456 s
.next_read_length(1);
1457 memset(read_buf
, 0, sizeof(read_buf
));
1458 error
= boost::system::error_code();
1459 bytes_transferred
= boost::asio::read(s
, buffers
,
1460 boost::asio::transfer_at_least(42), error
);
1461 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1462 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
1463 BOOST_ASIO_CHECK(!error
);
1465 s
.reset(read_data
, sizeof(read_data
));
1466 s
.next_read_length(10);
1467 memset(read_buf
, 0, sizeof(read_buf
));
1468 error
= boost::system::error_code();
1469 bytes_transferred
= boost::asio::read(s
, buffers
,
1470 boost::asio::transfer_at_least(42), error
);
1471 BOOST_ASIO_CHECK(bytes_transferred
== 50);
1472 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 50));
1473 BOOST_ASIO_CHECK(!error
);
1475 s
.reset(read_data
, sizeof(read_data
));
1476 memset(read_buf
, 0, sizeof(read_buf
));
1477 error
= boost::system::error_code();
1478 bytes_transferred
= boost::asio::read(s
, buffers
,
1479 boost::asio::transfer_exactly(1), error
);
1480 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1481 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
1482 BOOST_ASIO_CHECK(!error
);
1484 s
.reset(read_data
, sizeof(read_data
));
1485 s
.next_read_length(1);
1486 memset(read_buf
, 0, sizeof(read_buf
));
1487 error
= boost::system::error_code();
1488 bytes_transferred
= boost::asio::read(s
, buffers
,
1489 boost::asio::transfer_exactly(1), error
);
1490 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1491 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
1492 BOOST_ASIO_CHECK(!error
);
1494 s
.reset(read_data
, sizeof(read_data
));
1495 s
.next_read_length(10);
1496 memset(read_buf
, 0, sizeof(read_buf
));
1497 error
= boost::system::error_code();
1498 bytes_transferred
= boost::asio::read(s
, buffers
,
1499 boost::asio::transfer_exactly(1), error
);
1500 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1501 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
1502 BOOST_ASIO_CHECK(!error
);
1504 s
.reset(read_data
, sizeof(read_data
));
1505 memset(read_buf
, 0, sizeof(read_buf
));
1506 error
= boost::system::error_code();
1507 bytes_transferred
= boost::asio::read(s
, buffers
,
1508 boost::asio::transfer_exactly(10), error
);
1509 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1510 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1511 BOOST_ASIO_CHECK(!error
);
1513 s
.reset(read_data
, sizeof(read_data
));
1514 s
.next_read_length(1);
1515 memset(read_buf
, 0, sizeof(read_buf
));
1516 error
= boost::system::error_code();
1517 bytes_transferred
= boost::asio::read(s
, buffers
,
1518 boost::asio::transfer_exactly(10), error
);
1519 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1520 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1521 BOOST_ASIO_CHECK(!error
);
1523 s
.reset(read_data
, sizeof(read_data
));
1524 s
.next_read_length(10);
1525 memset(read_buf
, 0, sizeof(read_buf
));
1526 error
= boost::system::error_code();
1527 bytes_transferred
= boost::asio::read(s
, buffers
,
1528 boost::asio::transfer_exactly(10), error
);
1529 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1530 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1531 BOOST_ASIO_CHECK(!error
);
1533 s
.reset(read_data
, sizeof(read_data
));
1534 memset(read_buf
, 0, sizeof(read_buf
));
1535 error
= boost::system::error_code();
1536 bytes_transferred
= boost::asio::read(s
, buffers
,
1537 boost::asio::transfer_exactly(42), error
);
1538 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1539 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
1540 BOOST_ASIO_CHECK(!error
);
1542 s
.reset(read_data
, sizeof(read_data
));
1543 s
.next_read_length(1);
1544 memset(read_buf
, 0, sizeof(read_buf
));
1545 error
= boost::system::error_code();
1546 bytes_transferred
= boost::asio::read(s
, buffers
,
1547 boost::asio::transfer_exactly(42), error
);
1548 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1549 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
1550 BOOST_ASIO_CHECK(!error
);
1552 s
.reset(read_data
, sizeof(read_data
));
1553 s
.next_read_length(10);
1554 memset(read_buf
, 0, sizeof(read_buf
));
1555 error
= boost::system::error_code();
1556 bytes_transferred
= boost::asio::read(s
, buffers
,
1557 boost::asio::transfer_exactly(42), error
);
1558 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1559 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
1560 BOOST_ASIO_CHECK(!error
);
1562 s
.reset(read_data
, sizeof(read_data
));
1563 memset(read_buf
, 0, sizeof(read_buf
));
1564 bytes_transferred
= boost::asio::read(s
, buffers
,
1565 old_style_transfer_all
, error
);
1566 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1567 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1568 BOOST_ASIO_CHECK(!error
);
1570 s
.reset(read_data
, sizeof(read_data
));
1571 s
.next_read_length(1);
1572 memset(read_buf
, 0, sizeof(read_buf
));
1573 error
= boost::system::error_code();
1574 bytes_transferred
= boost::asio::read(s
, buffers
,
1575 old_style_transfer_all
, error
);
1576 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1577 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1578 BOOST_ASIO_CHECK(!error
);
1580 s
.reset(read_data
, sizeof(read_data
));
1581 s
.next_read_length(10);
1582 memset(read_buf
, 0, sizeof(read_buf
));
1583 error
= boost::system::error_code();
1584 bytes_transferred
= boost::asio::read(s
, buffers
,
1585 old_style_transfer_all
, error
);
1586 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1587 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1588 BOOST_ASIO_CHECK(!error
);
1590 s
.reset(read_data
, sizeof(read_data
));
1591 memset(read_buf
, 0, sizeof(read_buf
));
1592 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer(), error
);
1593 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1594 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1595 BOOST_ASIO_CHECK(!error
);
1597 s
.reset(read_data
, sizeof(read_data
));
1598 s
.next_read_length(1);
1599 memset(read_buf
, 0, sizeof(read_buf
));
1600 error
= boost::system::error_code();
1601 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer(), error
);
1602 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1603 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1604 BOOST_ASIO_CHECK(!error
);
1606 s
.reset(read_data
, sizeof(read_data
));
1607 s
.next_read_length(10);
1608 memset(read_buf
, 0, sizeof(read_buf
));
1609 error
= boost::system::error_code();
1610 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer(), error
);
1611 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1612 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1613 BOOST_ASIO_CHECK(!error
);
1616 void test_4_arg_vector_buffers_read()
1618 boost::asio::io_context ioc
;
1620 char read_buf
[sizeof(read_data
)];
1621 std::vector
<boost::asio::mutable_buffer
> buffers
;
1622 buffers
.push_back(boost::asio::buffer(read_buf
, 32));
1623 buffers
.push_back(boost::asio::buffer(read_buf
, 39) + 32);
1624 buffers
.push_back(boost::asio::buffer(read_buf
) + 39);
1626 s
.reset(read_data
, sizeof(read_data
));
1627 memset(read_buf
, 0, sizeof(read_buf
));
1628 boost::system::error_code error
;
1629 size_t bytes_transferred
= boost::asio::read(s
, buffers
,
1630 boost::asio::transfer_all(), error
);
1631 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1632 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1633 BOOST_ASIO_CHECK(!error
);
1635 s
.reset(read_data
, sizeof(read_data
));
1636 s
.next_read_length(1);
1637 memset(read_buf
, 0, sizeof(read_buf
));
1638 error
= boost::system::error_code();
1639 bytes_transferred
= boost::asio::read(s
, buffers
,
1640 boost::asio::transfer_all(), error
);
1641 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1642 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1643 BOOST_ASIO_CHECK(!error
);
1645 s
.reset(read_data
, sizeof(read_data
));
1646 s
.next_read_length(10);
1647 memset(read_buf
, 0, sizeof(read_buf
));
1648 error
= boost::system::error_code();
1649 bytes_transferred
= boost::asio::read(s
, buffers
,
1650 boost::asio::transfer_all(), error
);
1651 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1652 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1653 BOOST_ASIO_CHECK(!error
);
1655 s
.reset(read_data
, sizeof(read_data
));
1656 memset(read_buf
, 0, sizeof(read_buf
));
1657 error
= boost::system::error_code();
1658 bytes_transferred
= boost::asio::read(s
, buffers
,
1659 boost::asio::transfer_at_least(1), error
);
1660 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1661 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1662 BOOST_ASIO_CHECK(!error
);
1664 s
.reset(read_data
, sizeof(read_data
));
1665 s
.next_read_length(1);
1666 memset(read_buf
, 0, sizeof(read_buf
));
1667 error
= boost::system::error_code();
1668 bytes_transferred
= boost::asio::read(s
, buffers
,
1669 boost::asio::transfer_at_least(1), error
);
1670 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1671 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
1672 BOOST_ASIO_CHECK(!error
);
1674 s
.reset(read_data
, sizeof(read_data
));
1675 s
.next_read_length(10);
1676 memset(read_buf
, 0, sizeof(read_buf
));
1677 error
= boost::system::error_code();
1678 bytes_transferred
= boost::asio::read(s
, buffers
,
1679 boost::asio::transfer_at_least(1), error
);
1680 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1681 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1682 BOOST_ASIO_CHECK(!error
);
1684 s
.reset(read_data
, sizeof(read_data
));
1685 memset(read_buf
, 0, sizeof(read_buf
));
1686 error
= boost::system::error_code();
1687 bytes_transferred
= boost::asio::read(s
, buffers
,
1688 boost::asio::transfer_at_least(10), error
);
1689 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1690 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1691 BOOST_ASIO_CHECK(!error
);
1693 s
.reset(read_data
, sizeof(read_data
));
1694 s
.next_read_length(1);
1695 memset(read_buf
, 0, sizeof(read_buf
));
1696 error
= boost::system::error_code();
1697 bytes_transferred
= boost::asio::read(s
, buffers
,
1698 boost::asio::transfer_at_least(10), error
);
1699 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1700 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1701 BOOST_ASIO_CHECK(!error
);
1703 s
.reset(read_data
, sizeof(read_data
));
1704 s
.next_read_length(10);
1705 memset(read_buf
, 0, sizeof(read_buf
));
1706 error
= boost::system::error_code();
1707 bytes_transferred
= boost::asio::read(s
, buffers
,
1708 boost::asio::transfer_at_least(10), error
);
1709 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1710 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1711 BOOST_ASIO_CHECK(!error
);
1713 s
.reset(read_data
, sizeof(read_data
));
1714 memset(read_buf
, 0, sizeof(read_buf
));
1715 error
= boost::system::error_code();
1716 bytes_transferred
= boost::asio::read(s
, buffers
,
1717 boost::asio::transfer_at_least(42), error
);
1718 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1719 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1720 BOOST_ASIO_CHECK(!error
);
1722 s
.reset(read_data
, sizeof(read_data
));
1723 s
.next_read_length(1);
1724 memset(read_buf
, 0, sizeof(read_buf
));
1725 error
= boost::system::error_code();
1726 bytes_transferred
= boost::asio::read(s
, buffers
,
1727 boost::asio::transfer_at_least(42), error
);
1728 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1729 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
1730 BOOST_ASIO_CHECK(!error
);
1732 s
.reset(read_data
, sizeof(read_data
));
1733 s
.next_read_length(10);
1734 memset(read_buf
, 0, sizeof(read_buf
));
1735 error
= boost::system::error_code();
1736 bytes_transferred
= boost::asio::read(s
, buffers
,
1737 boost::asio::transfer_at_least(42), error
);
1738 BOOST_ASIO_CHECK(bytes_transferred
== 50);
1739 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 50));
1740 BOOST_ASIO_CHECK(!error
);
1742 s
.reset(read_data
, sizeof(read_data
));
1743 memset(read_buf
, 0, sizeof(read_buf
));
1744 error
= boost::system::error_code();
1745 bytes_transferred
= boost::asio::read(s
, buffers
,
1746 boost::asio::transfer_exactly(1), error
);
1747 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1748 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
1749 BOOST_ASIO_CHECK(!error
);
1751 s
.reset(read_data
, sizeof(read_data
));
1752 s
.next_read_length(1);
1753 memset(read_buf
, 0, sizeof(read_buf
));
1754 error
= boost::system::error_code();
1755 bytes_transferred
= boost::asio::read(s
, buffers
,
1756 boost::asio::transfer_exactly(1), error
);
1757 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1758 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
1759 BOOST_ASIO_CHECK(!error
);
1761 s
.reset(read_data
, sizeof(read_data
));
1762 s
.next_read_length(10);
1763 memset(read_buf
, 0, sizeof(read_buf
));
1764 error
= boost::system::error_code();
1765 bytes_transferred
= boost::asio::read(s
, buffers
,
1766 boost::asio::transfer_exactly(1), error
);
1767 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1768 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
1769 BOOST_ASIO_CHECK(!error
);
1771 s
.reset(read_data
, sizeof(read_data
));
1772 memset(read_buf
, 0, sizeof(read_buf
));
1773 error
= boost::system::error_code();
1774 bytes_transferred
= boost::asio::read(s
, buffers
,
1775 boost::asio::transfer_exactly(10), error
);
1776 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1777 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1778 BOOST_ASIO_CHECK(!error
);
1780 s
.reset(read_data
, sizeof(read_data
));
1781 s
.next_read_length(1);
1782 memset(read_buf
, 0, sizeof(read_buf
));
1783 error
= boost::system::error_code();
1784 bytes_transferred
= boost::asio::read(s
, buffers
,
1785 boost::asio::transfer_exactly(10), error
);
1786 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1787 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1788 BOOST_ASIO_CHECK(!error
);
1790 s
.reset(read_data
, sizeof(read_data
));
1791 s
.next_read_length(10);
1792 memset(read_buf
, 0, sizeof(read_buf
));
1793 error
= boost::system::error_code();
1794 bytes_transferred
= boost::asio::read(s
, buffers
,
1795 boost::asio::transfer_exactly(10), error
);
1796 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1797 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
1798 BOOST_ASIO_CHECK(!error
);
1800 s
.reset(read_data
, sizeof(read_data
));
1801 memset(read_buf
, 0, sizeof(read_buf
));
1802 error
= boost::system::error_code();
1803 bytes_transferred
= boost::asio::read(s
, buffers
,
1804 boost::asio::transfer_exactly(42), error
);
1805 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1806 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
1807 BOOST_ASIO_CHECK(!error
);
1809 s
.reset(read_data
, sizeof(read_data
));
1810 s
.next_read_length(1);
1811 memset(read_buf
, 0, sizeof(read_buf
));
1812 error
= boost::system::error_code();
1813 bytes_transferred
= boost::asio::read(s
, buffers
,
1814 boost::asio::transfer_exactly(42), error
);
1815 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1816 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
1817 BOOST_ASIO_CHECK(!error
);
1819 s
.reset(read_data
, sizeof(read_data
));
1820 s
.next_read_length(10);
1821 memset(read_buf
, 0, sizeof(read_buf
));
1822 error
= boost::system::error_code();
1823 bytes_transferred
= boost::asio::read(s
, buffers
,
1824 boost::asio::transfer_exactly(42), error
);
1825 BOOST_ASIO_CHECK(bytes_transferred
== 42);
1826 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
1827 BOOST_ASIO_CHECK(!error
);
1829 s
.reset(read_data
, sizeof(read_data
));
1830 memset(read_buf
, 0, sizeof(read_buf
));
1831 bytes_transferred
= boost::asio::read(s
, buffers
,
1832 old_style_transfer_all
, error
);
1833 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1834 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1835 BOOST_ASIO_CHECK(!error
);
1837 s
.reset(read_data
, sizeof(read_data
));
1838 s
.next_read_length(1);
1839 memset(read_buf
, 0, sizeof(read_buf
));
1840 error
= boost::system::error_code();
1841 bytes_transferred
= boost::asio::read(s
, buffers
,
1842 old_style_transfer_all
, error
);
1843 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1844 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1845 BOOST_ASIO_CHECK(!error
);
1847 s
.reset(read_data
, sizeof(read_data
));
1848 s
.next_read_length(10);
1849 memset(read_buf
, 0, sizeof(read_buf
));
1850 error
= boost::system::error_code();
1851 bytes_transferred
= boost::asio::read(s
, buffers
,
1852 old_style_transfer_all
, error
);
1853 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1854 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1855 BOOST_ASIO_CHECK(!error
);
1857 s
.reset(read_data
, sizeof(read_data
));
1858 memset(read_buf
, 0, sizeof(read_buf
));
1859 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer(), error
);
1860 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1861 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1862 BOOST_ASIO_CHECK(!error
);
1864 s
.reset(read_data
, sizeof(read_data
));
1865 s
.next_read_length(1);
1866 memset(read_buf
, 0, sizeof(read_buf
));
1867 error
= boost::system::error_code();
1868 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer(), error
);
1869 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1870 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1871 BOOST_ASIO_CHECK(!error
);
1873 s
.reset(read_data
, sizeof(read_data
));
1874 s
.next_read_length(10);
1875 memset(read_buf
, 0, sizeof(read_buf
));
1876 error
= boost::system::error_code();
1877 bytes_transferred
= boost::asio::read(s
, buffers
, short_transfer(), error
);
1878 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1879 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
1880 BOOST_ASIO_CHECK(!error
);
1883 void test_4_arg_dynamic_string_read()
1885 boost::asio::io_context ioc
;
1888 boost::asio::dynamic_string_buffer
<char, std::string::traits_type
,
1889 std::string::allocator_type
> sb
1890 = boost::asio::dynamic_buffer(data
, sizeof(read_data
));
1892 s
.reset(read_data
, sizeof(read_data
));
1893 sb
.consume(sb
.size());
1894 boost::system::error_code error
;
1895 size_t bytes_transferred
= boost::asio::read(s
, sb
,
1896 boost::asio::transfer_all(), error
);
1897 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1898 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1899 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1900 BOOST_ASIO_CHECK(!error
);
1902 s
.reset(read_data
, sizeof(read_data
));
1903 s
.next_read_length(1);
1904 sb
.consume(sb
.size());
1905 error
= boost::system::error_code();
1906 bytes_transferred
= boost::asio::read(s
, sb
,
1907 boost::asio::transfer_all(), error
);
1908 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1909 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1910 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1911 BOOST_ASIO_CHECK(!error
);
1913 s
.reset(read_data
, sizeof(read_data
));
1914 s
.next_read_length(10);
1915 sb
.consume(sb
.size());
1916 error
= boost::system::error_code();
1917 bytes_transferred
= boost::asio::read(s
, sb
,
1918 boost::asio::transfer_all(), error
);
1919 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1920 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1921 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1922 BOOST_ASIO_CHECK(!error
);
1924 s
.reset(read_data
, sizeof(read_data
));
1925 sb
.consume(sb
.size());
1926 error
= boost::system::error_code();
1927 bytes_transferred
= boost::asio::read(s
, sb
,
1928 boost::asio::transfer_at_least(1), error
);
1929 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1930 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1931 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1932 BOOST_ASIO_CHECK(!error
);
1934 s
.reset(read_data
, sizeof(read_data
));
1935 s
.next_read_length(1);
1936 sb
.consume(sb
.size());
1937 error
= boost::system::error_code();
1938 bytes_transferred
= boost::asio::read(s
, sb
,
1939 boost::asio::transfer_at_least(1), error
);
1940 BOOST_ASIO_CHECK(bytes_transferred
== 1);
1941 BOOST_ASIO_CHECK(sb
.size() == 1);
1942 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
1943 BOOST_ASIO_CHECK(!error
);
1945 s
.reset(read_data
, sizeof(read_data
));
1946 s
.next_read_length(10);
1947 sb
.consume(sb
.size());
1948 error
= boost::system::error_code();
1949 bytes_transferred
= boost::asio::read(s
, sb
,
1950 boost::asio::transfer_at_least(1), error
);
1951 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1952 BOOST_ASIO_CHECK(sb
.size() == 10);
1953 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
1954 BOOST_ASIO_CHECK(!error
);
1956 s
.reset(read_data
, sizeof(read_data
));
1957 sb
.consume(sb
.size());
1958 error
= boost::system::error_code();
1959 bytes_transferred
= boost::asio::read(s
, sb
,
1960 boost::asio::transfer_at_least(10), error
);
1961 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1962 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1963 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1964 BOOST_ASIO_CHECK(!error
);
1966 s
.reset(read_data
, sizeof(read_data
));
1967 s
.next_read_length(1);
1968 sb
.consume(sb
.size());
1969 error
= boost::system::error_code();
1970 bytes_transferred
= boost::asio::read(s
, sb
,
1971 boost::asio::transfer_at_least(10), error
);
1972 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1973 BOOST_ASIO_CHECK(sb
.size() == 10);
1974 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
1975 BOOST_ASIO_CHECK(!error
);
1977 s
.reset(read_data
, sizeof(read_data
));
1978 s
.next_read_length(10);
1979 sb
.consume(sb
.size());
1980 error
= boost::system::error_code();
1981 bytes_transferred
= boost::asio::read(s
, sb
,
1982 boost::asio::transfer_at_least(10), error
);
1983 BOOST_ASIO_CHECK(bytes_transferred
== 10);
1984 BOOST_ASIO_CHECK(sb
.size() == 10);
1985 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
1986 BOOST_ASIO_CHECK(!error
);
1988 s
.reset(read_data
, sizeof(read_data
));
1989 sb
.consume(sb
.size());
1990 error
= boost::system::error_code();
1991 bytes_transferred
= boost::asio::read(s
, sb
,
1992 boost::asio::transfer_at_least(42), error
);
1993 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
1994 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
1995 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
1996 BOOST_ASIO_CHECK(!error
);
1998 s
.reset(read_data
, sizeof(read_data
));
1999 s
.next_read_length(1);
2000 sb
.consume(sb
.size());
2001 error
= boost::system::error_code();
2002 bytes_transferred
= boost::asio::read(s
, sb
,
2003 boost::asio::transfer_at_least(42), error
);
2004 BOOST_ASIO_CHECK(bytes_transferred
== 42);
2005 BOOST_ASIO_CHECK(sb
.size() == 42);
2006 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
2007 BOOST_ASIO_CHECK(!error
);
2009 s
.reset(read_data
, sizeof(read_data
));
2010 s
.next_read_length(10);
2011 sb
.consume(sb
.size());
2012 error
= boost::system::error_code();
2013 bytes_transferred
= boost::asio::read(s
, sb
,
2014 boost::asio::transfer_at_least(42), error
);
2015 BOOST_ASIO_CHECK(bytes_transferred
== 50);
2016 BOOST_ASIO_CHECK(sb
.size() == 50);
2017 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 50));
2018 BOOST_ASIO_CHECK(!error
);
2020 s
.reset(read_data
, sizeof(read_data
));
2021 sb
.consume(sb
.size());
2022 error
= boost::system::error_code();
2023 bytes_transferred
= boost::asio::read(s
, sb
,
2024 boost::asio::transfer_exactly(1), error
);
2025 BOOST_ASIO_CHECK(bytes_transferred
== 1);
2026 BOOST_ASIO_CHECK(sb
.size() == 1);
2027 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
2028 BOOST_ASIO_CHECK(!error
);
2030 s
.reset(read_data
, sizeof(read_data
));
2031 s
.next_read_length(1);
2032 sb
.consume(sb
.size());
2033 error
= boost::system::error_code();
2034 bytes_transferred
= boost::asio::read(s
, sb
,
2035 boost::asio::transfer_exactly(1), error
);
2036 BOOST_ASIO_CHECK(bytes_transferred
== 1);
2037 BOOST_ASIO_CHECK(sb
.size() == 1);
2038 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
2039 BOOST_ASIO_CHECK(!error
);
2041 s
.reset(read_data
, sizeof(read_data
));
2042 s
.next_read_length(10);
2043 sb
.consume(sb
.size());
2044 error
= boost::system::error_code();
2045 bytes_transferred
= boost::asio::read(s
, sb
,
2046 boost::asio::transfer_exactly(1), error
);
2047 BOOST_ASIO_CHECK(bytes_transferred
== 1);
2048 BOOST_ASIO_CHECK(sb
.size() == 1);
2049 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
2050 BOOST_ASIO_CHECK(!error
);
2052 s
.reset(read_data
, sizeof(read_data
));
2053 sb
.consume(sb
.size());
2054 error
= boost::system::error_code();
2055 bytes_transferred
= boost::asio::read(s
, sb
,
2056 boost::asio::transfer_exactly(10), error
);
2057 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2058 BOOST_ASIO_CHECK(sb
.size() == 10);
2059 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
2060 BOOST_ASIO_CHECK(!error
);
2062 s
.reset(read_data
, sizeof(read_data
));
2063 s
.next_read_length(1);
2064 sb
.consume(sb
.size());
2065 error
= boost::system::error_code();
2066 bytes_transferred
= boost::asio::read(s
, sb
,
2067 boost::asio::transfer_exactly(10), error
);
2068 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2069 BOOST_ASIO_CHECK(sb
.size() == 10);
2070 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
2071 BOOST_ASIO_CHECK(!error
);
2073 s
.reset(read_data
, sizeof(read_data
));
2074 s
.next_read_length(10);
2075 sb
.consume(sb
.size());
2076 error
= boost::system::error_code();
2077 bytes_transferred
= boost::asio::read(s
, sb
,
2078 boost::asio::transfer_exactly(10), error
);
2079 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2080 BOOST_ASIO_CHECK(sb
.size() == 10);
2081 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
2082 BOOST_ASIO_CHECK(!error
);
2084 s
.reset(read_data
, sizeof(read_data
));
2085 sb
.consume(sb
.size());
2086 error
= boost::system::error_code();
2087 bytes_transferred
= boost::asio::read(s
, sb
,
2088 boost::asio::transfer_exactly(42), error
);
2089 BOOST_ASIO_CHECK(bytes_transferred
== 42);
2090 BOOST_ASIO_CHECK(sb
.size() == 42);
2091 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
2092 BOOST_ASIO_CHECK(!error
);
2094 s
.reset(read_data
, sizeof(read_data
));
2095 s
.next_read_length(1);
2096 sb
.consume(sb
.size());
2097 error
= boost::system::error_code();
2098 bytes_transferred
= boost::asio::read(s
, sb
,
2099 boost::asio::transfer_exactly(42), error
);
2100 BOOST_ASIO_CHECK(bytes_transferred
== 42);
2101 BOOST_ASIO_CHECK(sb
.size() == 42);
2102 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
2103 BOOST_ASIO_CHECK(!error
);
2105 s
.reset(read_data
, sizeof(read_data
));
2106 s
.next_read_length(10);
2107 sb
.consume(sb
.size());
2108 error
= boost::system::error_code();
2109 bytes_transferred
= boost::asio::read(s
, sb
,
2110 boost::asio::transfer_exactly(42), error
);
2111 BOOST_ASIO_CHECK(bytes_transferred
== 42);
2112 BOOST_ASIO_CHECK(sb
.size() == 42);
2113 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
2114 BOOST_ASIO_CHECK(!error
);
2116 s
.reset(read_data
, sizeof(read_data
));
2117 sb
.consume(sb
.size());
2118 bytes_transferred
= boost::asio::read(s
, sb
,
2119 old_style_transfer_all
, error
);
2120 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2121 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2122 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2123 BOOST_ASIO_CHECK(!error
);
2125 s
.reset(read_data
, sizeof(read_data
));
2126 s
.next_read_length(1);
2127 sb
.consume(sb
.size());
2128 error
= boost::system::error_code();
2129 bytes_transferred
= boost::asio::read(s
, sb
,
2130 old_style_transfer_all
, error
);
2131 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2132 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2133 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2134 BOOST_ASIO_CHECK(!error
);
2136 s
.reset(read_data
, sizeof(read_data
));
2137 s
.next_read_length(10);
2138 sb
.consume(sb
.size());
2139 error
= boost::system::error_code();
2140 bytes_transferred
= boost::asio::read(s
, sb
,
2141 old_style_transfer_all
, error
);
2142 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2143 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2144 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2145 BOOST_ASIO_CHECK(!error
);
2147 s
.reset(read_data
, sizeof(read_data
));
2148 sb
.consume(sb
.size());
2149 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer(), error
);
2150 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2151 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2152 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2153 BOOST_ASIO_CHECK(!error
);
2155 s
.reset(read_data
, sizeof(read_data
));
2156 s
.next_read_length(1);
2157 sb
.consume(sb
.size());
2158 error
= boost::system::error_code();
2159 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer(), error
);
2160 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2161 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2162 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2163 BOOST_ASIO_CHECK(!error
);
2165 s
.reset(read_data
, sizeof(read_data
));
2166 s
.next_read_length(10);
2167 sb
.consume(sb
.size());
2168 error
= boost::system::error_code();
2169 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer(), error
);
2170 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2171 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2172 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2173 BOOST_ASIO_CHECK(!error
);
2176 void test_4_arg_streambuf_read()
2178 #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
2179 boost::asio::io_context ioc
;
2181 boost::asio::streambuf
sb(sizeof(read_data
));
2183 s
.reset(read_data
, sizeof(read_data
));
2184 sb
.consume(sb
.size());
2185 boost::system::error_code error
;
2186 size_t bytes_transferred
= boost::asio::read(s
, sb
,
2187 boost::asio::transfer_all(), error
);
2188 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2189 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2190 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2191 BOOST_ASIO_CHECK(!error
);
2193 s
.reset(read_data
, sizeof(read_data
));
2194 s
.next_read_length(1);
2195 sb
.consume(sb
.size());
2196 error
= boost::system::error_code();
2197 bytes_transferred
= boost::asio::read(s
, sb
,
2198 boost::asio::transfer_all(), error
);
2199 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2200 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2201 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2202 BOOST_ASIO_CHECK(!error
);
2204 s
.reset(read_data
, sizeof(read_data
));
2205 s
.next_read_length(10);
2206 sb
.consume(sb
.size());
2207 error
= boost::system::error_code();
2208 bytes_transferred
= boost::asio::read(s
, sb
,
2209 boost::asio::transfer_all(), error
);
2210 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2211 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2212 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2213 BOOST_ASIO_CHECK(!error
);
2215 s
.reset(read_data
, sizeof(read_data
));
2216 sb
.consume(sb
.size());
2217 error
= boost::system::error_code();
2218 bytes_transferred
= boost::asio::read(s
, sb
,
2219 boost::asio::transfer_at_least(1), error
);
2220 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2221 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2222 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2223 BOOST_ASIO_CHECK(!error
);
2225 s
.reset(read_data
, sizeof(read_data
));
2226 s
.next_read_length(1);
2227 sb
.consume(sb
.size());
2228 error
= boost::system::error_code();
2229 bytes_transferred
= boost::asio::read(s
, sb
,
2230 boost::asio::transfer_at_least(1), error
);
2231 BOOST_ASIO_CHECK(bytes_transferred
== 1);
2232 BOOST_ASIO_CHECK(sb
.size() == 1);
2233 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
2234 BOOST_ASIO_CHECK(!error
);
2236 s
.reset(read_data
, sizeof(read_data
));
2237 s
.next_read_length(10);
2238 sb
.consume(sb
.size());
2239 error
= boost::system::error_code();
2240 bytes_transferred
= boost::asio::read(s
, sb
,
2241 boost::asio::transfer_at_least(1), error
);
2242 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2243 BOOST_ASIO_CHECK(sb
.size() == 10);
2244 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
2245 BOOST_ASIO_CHECK(!error
);
2247 s
.reset(read_data
, sizeof(read_data
));
2248 sb
.consume(sb
.size());
2249 error
= boost::system::error_code();
2250 bytes_transferred
= boost::asio::read(s
, sb
,
2251 boost::asio::transfer_at_least(10), error
);
2252 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2253 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2254 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2255 BOOST_ASIO_CHECK(!error
);
2257 s
.reset(read_data
, sizeof(read_data
));
2258 s
.next_read_length(1);
2259 sb
.consume(sb
.size());
2260 error
= boost::system::error_code();
2261 bytes_transferred
= boost::asio::read(s
, sb
,
2262 boost::asio::transfer_at_least(10), error
);
2263 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2264 BOOST_ASIO_CHECK(sb
.size() == 10);
2265 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
2266 BOOST_ASIO_CHECK(!error
);
2268 s
.reset(read_data
, sizeof(read_data
));
2269 s
.next_read_length(10);
2270 sb
.consume(sb
.size());
2271 error
= boost::system::error_code();
2272 bytes_transferred
= boost::asio::read(s
, sb
,
2273 boost::asio::transfer_at_least(10), error
);
2274 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2275 BOOST_ASIO_CHECK(sb
.size() == 10);
2276 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
2277 BOOST_ASIO_CHECK(!error
);
2279 s
.reset(read_data
, sizeof(read_data
));
2280 sb
.consume(sb
.size());
2281 error
= boost::system::error_code();
2282 bytes_transferred
= boost::asio::read(s
, sb
,
2283 boost::asio::transfer_at_least(42), error
);
2284 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2285 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2286 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2287 BOOST_ASIO_CHECK(!error
);
2289 s
.reset(read_data
, sizeof(read_data
));
2290 s
.next_read_length(1);
2291 sb
.consume(sb
.size());
2292 error
= boost::system::error_code();
2293 bytes_transferred
= boost::asio::read(s
, sb
,
2294 boost::asio::transfer_at_least(42), error
);
2295 BOOST_ASIO_CHECK(bytes_transferred
== 42);
2296 BOOST_ASIO_CHECK(sb
.size() == 42);
2297 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
2298 BOOST_ASIO_CHECK(!error
);
2300 s
.reset(read_data
, sizeof(read_data
));
2301 s
.next_read_length(10);
2302 sb
.consume(sb
.size());
2303 error
= boost::system::error_code();
2304 bytes_transferred
= boost::asio::read(s
, sb
,
2305 boost::asio::transfer_at_least(42), error
);
2306 BOOST_ASIO_CHECK(bytes_transferred
== 50);
2307 BOOST_ASIO_CHECK(sb
.size() == 50);
2308 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 50));
2309 BOOST_ASIO_CHECK(!error
);
2311 s
.reset(read_data
, sizeof(read_data
));
2312 sb
.consume(sb
.size());
2313 error
= boost::system::error_code();
2314 bytes_transferred
= boost::asio::read(s
, sb
,
2315 boost::asio::transfer_exactly(1), error
);
2316 BOOST_ASIO_CHECK(bytes_transferred
== 1);
2317 BOOST_ASIO_CHECK(sb
.size() == 1);
2318 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
2319 BOOST_ASIO_CHECK(!error
);
2321 s
.reset(read_data
, sizeof(read_data
));
2322 s
.next_read_length(1);
2323 sb
.consume(sb
.size());
2324 error
= boost::system::error_code();
2325 bytes_transferred
= boost::asio::read(s
, sb
,
2326 boost::asio::transfer_exactly(1), error
);
2327 BOOST_ASIO_CHECK(bytes_transferred
== 1);
2328 BOOST_ASIO_CHECK(sb
.size() == 1);
2329 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
2330 BOOST_ASIO_CHECK(!error
);
2332 s
.reset(read_data
, sizeof(read_data
));
2333 s
.next_read_length(10);
2334 sb
.consume(sb
.size());
2335 error
= boost::system::error_code();
2336 bytes_transferred
= boost::asio::read(s
, sb
,
2337 boost::asio::transfer_exactly(1), error
);
2338 BOOST_ASIO_CHECK(bytes_transferred
== 1);
2339 BOOST_ASIO_CHECK(sb
.size() == 1);
2340 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
2341 BOOST_ASIO_CHECK(!error
);
2343 s
.reset(read_data
, sizeof(read_data
));
2344 sb
.consume(sb
.size());
2345 error
= boost::system::error_code();
2346 bytes_transferred
= boost::asio::read(s
, sb
,
2347 boost::asio::transfer_exactly(10), error
);
2348 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2349 BOOST_ASIO_CHECK(sb
.size() == 10);
2350 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
2351 BOOST_ASIO_CHECK(!error
);
2353 s
.reset(read_data
, sizeof(read_data
));
2354 s
.next_read_length(1);
2355 sb
.consume(sb
.size());
2356 error
= boost::system::error_code();
2357 bytes_transferred
= boost::asio::read(s
, sb
,
2358 boost::asio::transfer_exactly(10), error
);
2359 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2360 BOOST_ASIO_CHECK(sb
.size() == 10);
2361 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
2362 BOOST_ASIO_CHECK(!error
);
2364 s
.reset(read_data
, sizeof(read_data
));
2365 s
.next_read_length(10);
2366 sb
.consume(sb
.size());
2367 error
= boost::system::error_code();
2368 bytes_transferred
= boost::asio::read(s
, sb
,
2369 boost::asio::transfer_exactly(10), error
);
2370 BOOST_ASIO_CHECK(bytes_transferred
== 10);
2371 BOOST_ASIO_CHECK(sb
.size() == 10);
2372 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
2373 BOOST_ASIO_CHECK(!error
);
2375 s
.reset(read_data
, sizeof(read_data
));
2376 sb
.consume(sb
.size());
2377 error
= boost::system::error_code();
2378 bytes_transferred
= boost::asio::read(s
, sb
,
2379 boost::asio::transfer_exactly(42), error
);
2380 BOOST_ASIO_CHECK(bytes_transferred
== 42);
2381 BOOST_ASIO_CHECK(sb
.size() == 42);
2382 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
2383 BOOST_ASIO_CHECK(!error
);
2385 s
.reset(read_data
, sizeof(read_data
));
2386 s
.next_read_length(1);
2387 sb
.consume(sb
.size());
2388 error
= boost::system::error_code();
2389 bytes_transferred
= boost::asio::read(s
, sb
,
2390 boost::asio::transfer_exactly(42), error
);
2391 BOOST_ASIO_CHECK(bytes_transferred
== 42);
2392 BOOST_ASIO_CHECK(sb
.size() == 42);
2393 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
2394 BOOST_ASIO_CHECK(!error
);
2396 s
.reset(read_data
, sizeof(read_data
));
2397 s
.next_read_length(10);
2398 sb
.consume(sb
.size());
2399 error
= boost::system::error_code();
2400 bytes_transferred
= boost::asio::read(s
, sb
,
2401 boost::asio::transfer_exactly(42), error
);
2402 BOOST_ASIO_CHECK(bytes_transferred
== 42);
2403 BOOST_ASIO_CHECK(sb
.size() == 42);
2404 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
2405 BOOST_ASIO_CHECK(!error
);
2407 s
.reset(read_data
, sizeof(read_data
));
2408 sb
.consume(sb
.size());
2409 bytes_transferred
= boost::asio::read(s
, sb
,
2410 old_style_transfer_all
, error
);
2411 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2412 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2413 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2414 BOOST_ASIO_CHECK(!error
);
2416 s
.reset(read_data
, sizeof(read_data
));
2417 s
.next_read_length(1);
2418 sb
.consume(sb
.size());
2419 error
= boost::system::error_code();
2420 bytes_transferred
= boost::asio::read(s
, sb
,
2421 old_style_transfer_all
, error
);
2422 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2423 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2424 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2425 BOOST_ASIO_CHECK(!error
);
2427 s
.reset(read_data
, sizeof(read_data
));
2428 s
.next_read_length(10);
2429 sb
.consume(sb
.size());
2430 error
= boost::system::error_code();
2431 bytes_transferred
= boost::asio::read(s
, sb
,
2432 old_style_transfer_all
, error
);
2433 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2434 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2435 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2436 BOOST_ASIO_CHECK(!error
);
2438 s
.reset(read_data
, sizeof(read_data
));
2439 sb
.consume(sb
.size());
2440 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer(), error
);
2441 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2442 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2443 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2444 BOOST_ASIO_CHECK(!error
);
2446 s
.reset(read_data
, sizeof(read_data
));
2447 s
.next_read_length(1);
2448 sb
.consume(sb
.size());
2449 error
= boost::system::error_code();
2450 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer(), error
);
2451 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2452 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2453 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2454 BOOST_ASIO_CHECK(!error
);
2456 s
.reset(read_data
, sizeof(read_data
));
2457 s
.next_read_length(10);
2458 sb
.consume(sb
.size());
2459 error
= boost::system::error_code();
2460 bytes_transferred
= boost::asio::read(s
, sb
, short_transfer(), error
);
2461 BOOST_ASIO_CHECK(bytes_transferred
== sizeof(read_data
));
2462 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2463 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2464 BOOST_ASIO_CHECK(!error
);
2465 #endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
2468 void async_read_handler(const boost::system::error_code
& e
,
2469 size_t bytes_transferred
, size_t expected_bytes_transferred
, bool* called
)
2472 BOOST_ASIO_CHECK(!e
);
2473 BOOST_ASIO_CHECK(bytes_transferred
== expected_bytes_transferred
);
2476 void test_3_arg_mutable_buffer_async_read()
2478 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2479 namespace bindns
= boost
;
2480 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2481 namespace bindns
= std
;
2482 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2483 using bindns::placeholders::_1
;
2484 using bindns::placeholders::_2
;
2486 boost::asio::io_context ioc
;
2488 char read_buf
[sizeof(read_data
)];
2489 boost::asio::mutable_buffer buffers
2490 = boost::asio::buffer(read_buf
, sizeof(read_buf
));
2492 s
.reset(read_data
, sizeof(read_data
));
2493 memset(read_buf
, 0, sizeof(read_buf
));
2494 bool called
= false;
2495 boost::asio::async_read(s
, buffers
,
2496 bindns::bind(async_read_handler
,
2497 _1
, _2
, sizeof(read_data
), &called
));
2500 BOOST_ASIO_CHECK(called
);
2501 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2503 s
.reset(read_data
, sizeof(read_data
));
2504 s
.next_read_length(1);
2505 memset(read_buf
, 0, sizeof(read_buf
));
2507 boost::asio::async_read(s
, buffers
,
2508 bindns::bind(async_read_handler
,
2509 _1
, _2
, sizeof(read_data
), &called
));
2512 BOOST_ASIO_CHECK(called
);
2513 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2515 s
.reset(read_data
, sizeof(read_data
));
2516 s
.next_read_length(10);
2517 memset(read_buf
, 0, sizeof(read_buf
));
2519 boost::asio::async_read(s
, buffers
,
2520 bindns::bind(async_read_handler
,
2521 _1
, _2
, sizeof(read_data
), &called
));
2524 BOOST_ASIO_CHECK(called
);
2525 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2527 s
.reset(read_data
, sizeof(read_data
));
2528 memset(read_buf
, 0, sizeof(read_buf
));
2529 int i
= boost::asio::async_read(s
, buffers
, archetypes::lazy_handler());
2530 BOOST_ASIO_CHECK(i
== 42);
2533 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2536 void test_3_arg_boost_array_buffers_async_read()
2538 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2539 namespace bindns
= boost
;
2540 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2541 namespace bindns
= std
;
2542 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2543 using bindns::placeholders::_1
;
2544 using bindns::placeholders::_2
;
2546 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
2547 boost::asio::io_context ioc
;
2549 char read_buf
[sizeof(read_data
)];
2550 boost::array
<boost::asio::mutable_buffer
, 2> buffers
= { {
2551 boost::asio::buffer(read_buf
, 32),
2552 boost::asio::buffer(read_buf
) + 32 } };
2554 s
.reset(read_data
, sizeof(read_data
));
2555 memset(read_buf
, 0, sizeof(read_buf
));
2556 bool called
= false;
2557 boost::asio::async_read(s
, buffers
,
2558 bindns::bind(async_read_handler
,
2559 _1
, _2
, sizeof(read_data
), &called
));
2562 BOOST_ASIO_CHECK(called
);
2563 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2565 s
.reset(read_data
, sizeof(read_data
));
2566 s
.next_read_length(1);
2567 memset(read_buf
, 0, sizeof(read_buf
));
2569 boost::asio::async_read(s
, buffers
,
2570 bindns::bind(async_read_handler
,
2571 _1
, _2
, sizeof(read_data
), &called
));
2574 BOOST_ASIO_CHECK(called
);
2575 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2577 s
.reset(read_data
, sizeof(read_data
));
2578 s
.next_read_length(10);
2579 memset(read_buf
, 0, sizeof(read_buf
));
2581 boost::asio::async_read(s
, buffers
,
2582 bindns::bind(async_read_handler
,
2583 _1
, _2
, sizeof(read_data
), &called
));
2586 BOOST_ASIO_CHECK(called
);
2587 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2589 s
.reset(read_data
, sizeof(read_data
));
2590 memset(read_buf
, 0, sizeof(read_buf
));
2591 int i
= boost::asio::async_read(s
, buffers
, archetypes::lazy_handler());
2592 BOOST_ASIO_CHECK(i
== 42);
2595 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2596 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
2599 void test_3_arg_std_array_buffers_async_read()
2601 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2602 namespace bindns
= boost
;
2603 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2604 namespace bindns
= std
;
2605 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2606 using bindns::placeholders::_1
;
2607 using bindns::placeholders::_2
;
2609 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
2610 boost::asio::io_context ioc
;
2612 char read_buf
[sizeof(read_data
)];
2613 std::array
<boost::asio::mutable_buffer
, 2> buffers
= { {
2614 boost::asio::buffer(read_buf
, 32),
2615 boost::asio::buffer(read_buf
) + 32 } };
2617 s
.reset(read_data
, sizeof(read_data
));
2618 memset(read_buf
, 0, sizeof(read_buf
));
2619 bool called
= false;
2620 boost::asio::async_read(s
, buffers
,
2621 bindns::bind(async_read_handler
,
2622 _1
, _2
, sizeof(read_data
), &called
));
2625 BOOST_ASIO_CHECK(called
);
2626 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2628 s
.reset(read_data
, sizeof(read_data
));
2629 s
.next_read_length(1);
2630 memset(read_buf
, 0, sizeof(read_buf
));
2632 boost::asio::async_read(s
, buffers
,
2633 bindns::bind(async_read_handler
,
2634 _1
, _2
, sizeof(read_data
), &called
));
2637 BOOST_ASIO_CHECK(called
);
2638 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2640 s
.reset(read_data
, sizeof(read_data
));
2641 s
.next_read_length(10);
2642 memset(read_buf
, 0, sizeof(read_buf
));
2644 boost::asio::async_read(s
, buffers
,
2645 bindns::bind(async_read_handler
,
2646 _1
, _2
, sizeof(read_data
), &called
));
2649 BOOST_ASIO_CHECK(called
);
2650 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2652 s
.reset(read_data
, sizeof(read_data
));
2653 memset(read_buf
, 0, sizeof(read_buf
));
2654 int i
= boost::asio::async_read(s
, buffers
, archetypes::lazy_handler());
2655 BOOST_ASIO_CHECK(i
== 42);
2658 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2659 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
2662 void test_3_arg_vector_buffers_async_read()
2664 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2665 namespace bindns
= boost
;
2666 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2667 namespace bindns
= std
;
2668 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2669 using bindns::placeholders::_1
;
2670 using bindns::placeholders::_2
;
2672 boost::asio::io_context ioc
;
2674 char read_buf
[sizeof(read_data
)];
2675 std::vector
<boost::asio::mutable_buffer
> buffers
;
2676 buffers
.push_back(boost::asio::buffer(read_buf
, 32));
2677 buffers
.push_back(boost::asio::buffer(read_buf
, 39) + 32);
2678 buffers
.push_back(boost::asio::buffer(read_buf
) + 39);
2680 s
.reset(read_data
, sizeof(read_data
));
2681 memset(read_buf
, 0, sizeof(read_buf
));
2682 bool called
= false;
2683 boost::asio::async_read(s
, buffers
,
2684 bindns::bind(async_read_handler
,
2685 _1
, _2
, sizeof(read_data
), &called
));
2688 BOOST_ASIO_CHECK(called
);
2689 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2691 s
.reset(read_data
, sizeof(read_data
));
2692 s
.next_read_length(1);
2693 memset(read_buf
, 0, sizeof(read_buf
));
2695 boost::asio::async_read(s
, buffers
,
2696 bindns::bind(async_read_handler
,
2697 _1
, _2
, sizeof(read_data
), &called
));
2700 BOOST_ASIO_CHECK(called
);
2701 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2703 s
.reset(read_data
, sizeof(read_data
));
2704 s
.next_read_length(10);
2705 memset(read_buf
, 0, sizeof(read_buf
));
2707 boost::asio::async_read(s
, buffers
,
2708 bindns::bind(async_read_handler
,
2709 _1
, _2
, sizeof(read_data
), &called
));
2712 BOOST_ASIO_CHECK(called
);
2713 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2715 s
.reset(read_data
, sizeof(read_data
));
2716 memset(read_buf
, 0, sizeof(read_buf
));
2717 int i
= boost::asio::async_read(s
, buffers
, archetypes::lazy_handler());
2718 BOOST_ASIO_CHECK(i
== 42);
2721 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2724 void test_3_arg_dynamic_string_async_read()
2726 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2727 namespace bindns
= boost
;
2728 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2729 namespace bindns
= std
;
2730 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2731 using bindns::placeholders::_1
;
2732 using bindns::placeholders::_2
;
2734 boost::asio::io_context ioc
;
2737 boost::asio::dynamic_string_buffer
<char, std::string::traits_type
,
2738 std::string::allocator_type
> sb
2739 = boost::asio::dynamic_buffer(data
, sizeof(read_data
));
2741 s
.reset(read_data
, sizeof(read_data
));
2742 sb
.consume(sb
.size());
2743 bool called
= false;
2744 boost::asio::async_read(s
, sb
,
2745 bindns::bind(async_read_handler
,
2746 _1
, _2
, sizeof(read_data
), &called
));
2749 BOOST_ASIO_CHECK(called
);
2750 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2751 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2753 s
.reset(read_data
, sizeof(read_data
));
2754 s
.next_read_length(1);
2755 sb
.consume(sb
.size());
2757 boost::asio::async_read(s
, sb
,
2758 bindns::bind(async_read_handler
,
2759 _1
, _2
, sizeof(read_data
), &called
));
2762 BOOST_ASIO_CHECK(called
);
2763 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2764 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2766 s
.reset(read_data
, sizeof(read_data
));
2767 s
.next_read_length(10);
2768 sb
.consume(sb
.size());
2770 boost::asio::async_read(s
, sb
,
2771 bindns::bind(async_read_handler
,
2772 _1
, _2
, sizeof(read_data
), &called
));
2775 BOOST_ASIO_CHECK(called
);
2776 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2777 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2779 s
.reset(read_data
, sizeof(read_data
));
2780 sb
.consume(sb
.size());
2781 int i
= boost::asio::async_read(s
, sb
, archetypes::lazy_handler());
2782 BOOST_ASIO_CHECK(i
== 42);
2785 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2786 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
2789 void test_3_arg_streambuf_async_read()
2791 #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
2792 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2793 namespace bindns
= boost
;
2794 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2795 namespace bindns
= std
;
2796 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2797 using bindns::placeholders::_1
;
2798 using bindns::placeholders::_2
;
2800 boost::asio::io_context ioc
;
2802 boost::asio::streambuf
sb(sizeof(read_data
));
2804 s
.reset(read_data
, sizeof(read_data
));
2805 sb
.consume(sb
.size());
2806 bool called
= false;
2807 boost::asio::async_read(s
, sb
,
2808 bindns::bind(async_read_handler
,
2809 _1
, _2
, sizeof(read_data
), &called
));
2812 BOOST_ASIO_CHECK(called
);
2813 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2814 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2816 s
.reset(read_data
, sizeof(read_data
));
2817 s
.next_read_length(1);
2818 sb
.consume(sb
.size());
2820 boost::asio::async_read(s
, sb
,
2821 bindns::bind(async_read_handler
,
2822 _1
, _2
, sizeof(read_data
), &called
));
2825 BOOST_ASIO_CHECK(called
);
2826 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2827 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2829 s
.reset(read_data
, sizeof(read_data
));
2830 s
.next_read_length(10);
2831 sb
.consume(sb
.size());
2833 boost::asio::async_read(s
, sb
,
2834 bindns::bind(async_read_handler
,
2835 _1
, _2
, sizeof(read_data
), &called
));
2838 BOOST_ASIO_CHECK(called
);
2839 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2840 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2842 s
.reset(read_data
, sizeof(read_data
));
2843 sb
.consume(sb
.size());
2844 int i
= boost::asio::async_read(s
, sb
, archetypes::lazy_handler());
2845 BOOST_ASIO_CHECK(i
== 42);
2848 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
2849 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
2850 #endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
2853 void test_4_arg_mutable_buffer_async_read()
2855 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2856 namespace bindns
= boost
;
2857 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2858 namespace bindns
= std
;
2859 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2860 using bindns::placeholders::_1
;
2861 using bindns::placeholders::_2
;
2863 boost::asio::io_context ioc
;
2865 char read_buf
[sizeof(read_data
)];
2866 boost::asio::mutable_buffer buffers
2867 = boost::asio::buffer(read_buf
, sizeof(read_buf
));
2869 s
.reset(read_data
, sizeof(read_data
));
2870 memset(read_buf
, 0, sizeof(read_buf
));
2871 bool called
= false;
2872 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
2873 bindns::bind(async_read_handler
,
2874 _1
, _2
, sizeof(read_data
), &called
));
2877 BOOST_ASIO_CHECK(called
);
2878 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2880 s
.reset(read_data
, sizeof(read_data
));
2881 s
.next_read_length(1);
2882 memset(read_buf
, 0, sizeof(read_buf
));
2884 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
2885 bindns::bind(async_read_handler
,
2886 _1
, _2
, sizeof(read_data
), &called
));
2889 BOOST_ASIO_CHECK(called
);
2890 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2892 s
.reset(read_data
, sizeof(read_data
));
2893 s
.next_read_length(10);
2894 memset(read_buf
, 0, sizeof(read_buf
));
2896 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
2897 bindns::bind(async_read_handler
,
2898 _1
, _2
, sizeof(read_data
), &called
));
2901 BOOST_ASIO_CHECK(called
);
2902 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2904 s
.reset(read_data
, sizeof(read_data
));
2905 memset(read_buf
, 0, sizeof(read_buf
));
2907 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
2908 bindns::bind(async_read_handler
,
2909 _1
, _2
, sizeof(read_data
), &called
));
2912 BOOST_ASIO_CHECK(called
);
2913 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2915 s
.reset(read_data
, sizeof(read_data
));
2916 s
.next_read_length(1);
2917 memset(read_buf
, 0, sizeof(read_buf
));
2919 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
2920 bindns::bind(async_read_handler
,
2921 _1
, _2
, 1, &called
));
2924 BOOST_ASIO_CHECK(called
);
2925 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
2927 s
.reset(read_data
, sizeof(read_data
));
2928 s
.next_read_length(10);
2929 memset(read_buf
, 0, sizeof(read_buf
));
2931 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
2932 bindns::bind(async_read_handler
,
2933 _1
, _2
, 10, &called
));
2936 BOOST_ASIO_CHECK(called
);
2937 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
2939 s
.reset(read_data
, sizeof(read_data
));
2940 memset(read_buf
, 0, sizeof(read_buf
));
2942 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
2943 bindns::bind(async_read_handler
,
2944 _1
, _2
, sizeof(read_data
), &called
));
2947 BOOST_ASIO_CHECK(called
);
2948 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2950 s
.reset(read_data
, sizeof(read_data
));
2951 s
.next_read_length(1);
2952 memset(read_buf
, 0, sizeof(read_buf
));
2954 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
2955 bindns::bind(async_read_handler
,
2956 _1
, _2
, 10, &called
));
2959 BOOST_ASIO_CHECK(called
);
2960 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
2962 s
.reset(read_data
, sizeof(read_data
));
2963 s
.next_read_length(10);
2964 memset(read_buf
, 0, sizeof(read_buf
));
2966 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
2967 bindns::bind(async_read_handler
,
2968 _1
, _2
, 10, &called
));
2971 BOOST_ASIO_CHECK(called
);
2972 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
2974 s
.reset(read_data
, sizeof(read_data
));
2975 memset(read_buf
, 0, sizeof(read_buf
));
2977 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
2978 bindns::bind(async_read_handler
,
2979 _1
, _2
, sizeof(read_data
), &called
));
2982 BOOST_ASIO_CHECK(called
);
2983 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
2985 s
.reset(read_data
, sizeof(read_data
));
2986 s
.next_read_length(1);
2987 memset(read_buf
, 0, sizeof(read_buf
));
2989 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
2990 bindns::bind(async_read_handler
,
2991 _1
, _2
, 42, &called
));
2994 BOOST_ASIO_CHECK(called
);
2995 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
2997 s
.reset(read_data
, sizeof(read_data
));
2998 s
.next_read_length(10);
2999 memset(read_buf
, 0, sizeof(read_buf
));
3001 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
3002 bindns::bind(async_read_handler
,
3003 _1
, _2
, 50, &called
));
3006 BOOST_ASIO_CHECK(called
);
3007 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 50));
3009 s
.reset(read_data
, sizeof(read_data
));
3010 memset(read_buf
, 0, sizeof(read_buf
));
3012 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3013 bindns::bind(async_read_handler
,
3014 _1
, _2
, 1, &called
));
3017 BOOST_ASIO_CHECK(called
);
3018 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3020 s
.reset(read_data
, sizeof(read_data
));
3021 s
.next_read_length(1);
3022 memset(read_buf
, 0, sizeof(read_buf
));
3024 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3025 bindns::bind(async_read_handler
,
3026 _1
, _2
, 1, &called
));
3029 BOOST_ASIO_CHECK(called
);
3030 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3032 s
.reset(read_data
, sizeof(read_data
));
3033 s
.next_read_length(10);
3034 memset(read_buf
, 0, sizeof(read_buf
));
3036 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3037 bindns::bind(async_read_handler
,
3038 _1
, _2
, 1, &called
));
3041 BOOST_ASIO_CHECK(called
);
3042 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3044 s
.reset(read_data
, sizeof(read_data
));
3045 memset(read_buf
, 0, sizeof(read_buf
));
3047 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3048 bindns::bind(async_read_handler
,
3049 _1
, _2
, 10, &called
));
3052 BOOST_ASIO_CHECK(called
);
3053 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3055 s
.reset(read_data
, sizeof(read_data
));
3056 s
.next_read_length(1);
3057 memset(read_buf
, 0, sizeof(read_buf
));
3059 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3060 bindns::bind(async_read_handler
,
3061 _1
, _2
, 10, &called
));
3064 BOOST_ASIO_CHECK(called
);
3065 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3067 s
.reset(read_data
, sizeof(read_data
));
3068 s
.next_read_length(10);
3069 memset(read_buf
, 0, sizeof(read_buf
));
3071 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3072 bindns::bind(async_read_handler
,
3073 _1
, _2
, 10, &called
));
3076 BOOST_ASIO_CHECK(called
);
3077 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3079 s
.reset(read_data
, sizeof(read_data
));
3080 memset(read_buf
, 0, sizeof(read_buf
));
3082 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3083 bindns::bind(async_read_handler
,
3084 _1
, _2
, 42, &called
));
3087 BOOST_ASIO_CHECK(called
);
3088 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3090 s
.reset(read_data
, sizeof(read_data
));
3091 s
.next_read_length(1);
3092 memset(read_buf
, 0, sizeof(read_buf
));
3094 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3095 bindns::bind(async_read_handler
,
3096 _1
, _2
, 42, &called
));
3099 BOOST_ASIO_CHECK(called
);
3100 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3102 s
.reset(read_data
, sizeof(read_data
));
3103 s
.next_read_length(10);
3104 memset(read_buf
, 0, sizeof(read_buf
));
3106 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3107 bindns::bind(async_read_handler
,
3108 _1
, _2
, 42, &called
));
3111 BOOST_ASIO_CHECK(called
);
3112 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3114 s
.reset(read_data
, sizeof(read_data
));
3115 memset(read_buf
, 0, sizeof(read_buf
));
3117 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3118 bindns::bind(async_read_handler
,
3119 _1
, _2
, sizeof(read_data
), &called
));
3122 BOOST_ASIO_CHECK(called
);
3123 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3125 s
.reset(read_data
, sizeof(read_data
));
3126 s
.next_read_length(1);
3127 memset(read_buf
, 0, sizeof(read_buf
));
3129 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3130 bindns::bind(async_read_handler
,
3131 _1
, _2
, sizeof(read_data
), &called
));
3134 BOOST_ASIO_CHECK(called
);
3135 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3137 s
.reset(read_data
, sizeof(read_data
));
3138 s
.next_read_length(10);
3139 memset(read_buf
, 0, sizeof(read_buf
));
3141 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3142 bindns::bind(async_read_handler
,
3143 _1
, _2
, sizeof(read_data
), &called
));
3146 BOOST_ASIO_CHECK(called
);
3147 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3149 s
.reset(read_data
, sizeof(read_data
));
3150 memset(read_buf
, 0, sizeof(read_buf
));
3152 boost::asio::async_read(s
, buffers
, short_transfer(),
3153 bindns::bind(async_read_handler
,
3154 _1
, _2
, sizeof(read_data
), &called
));
3157 BOOST_ASIO_CHECK(called
);
3158 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3160 s
.reset(read_data
, sizeof(read_data
));
3161 s
.next_read_length(1);
3162 memset(read_buf
, 0, sizeof(read_buf
));
3164 boost::asio::async_read(s
, buffers
, short_transfer(),
3165 bindns::bind(async_read_handler
,
3166 _1
, _2
, sizeof(read_data
), &called
));
3169 BOOST_ASIO_CHECK(called
);
3170 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3172 s
.reset(read_data
, sizeof(read_data
));
3173 s
.next_read_length(10);
3174 memset(read_buf
, 0, sizeof(read_buf
));
3176 boost::asio::async_read(s
, buffers
, short_transfer(),
3177 bindns::bind(async_read_handler
,
3178 _1
, _2
, sizeof(read_data
), &called
));
3181 BOOST_ASIO_CHECK(called
);
3182 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3184 s
.reset(read_data
, sizeof(read_data
));
3185 memset(read_buf
, 0, sizeof(read_buf
));
3186 int i
= boost::asio::async_read(s
, buffers
,
3187 short_transfer(), archetypes::lazy_handler());
3188 BOOST_ASIO_CHECK(i
== 42);
3191 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3194 void test_4_arg_boost_array_buffers_async_read()
3196 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3197 namespace bindns
= boost
;
3198 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3199 namespace bindns
= std
;
3200 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3201 using bindns::placeholders::_1
;
3202 using bindns::placeholders::_2
;
3204 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
3205 boost::asio::io_context ioc
;
3207 char read_buf
[sizeof(read_data
)];
3208 boost::array
<boost::asio::mutable_buffer
, 2> buffers
= { {
3209 boost::asio::buffer(read_buf
, 32),
3210 boost::asio::buffer(read_buf
) + 32 } };
3212 s
.reset(read_data
, sizeof(read_data
));
3213 memset(read_buf
, 0, sizeof(read_buf
));
3214 bool called
= false;
3215 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3216 bindns::bind(async_read_handler
,
3217 _1
, _2
, sizeof(read_data
), &called
));
3220 BOOST_ASIO_CHECK(called
);
3221 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3223 s
.reset(read_data
, sizeof(read_data
));
3224 s
.next_read_length(1);
3225 memset(read_buf
, 0, sizeof(read_buf
));
3227 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3228 bindns::bind(async_read_handler
,
3229 _1
, _2
, sizeof(read_data
), &called
));
3232 BOOST_ASIO_CHECK(called
);
3233 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3235 s
.reset(read_data
, sizeof(read_data
));
3236 s
.next_read_length(10);
3237 memset(read_buf
, 0, sizeof(read_buf
));
3239 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3240 bindns::bind(async_read_handler
,
3241 _1
, _2
, sizeof(read_data
), &called
));
3244 BOOST_ASIO_CHECK(called
);
3245 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3247 s
.reset(read_data
, sizeof(read_data
));
3248 memset(read_buf
, 0, sizeof(read_buf
));
3250 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3251 bindns::bind(async_read_handler
,
3252 _1
, _2
, sizeof(read_data
), &called
));
3255 BOOST_ASIO_CHECK(called
);
3256 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3258 s
.reset(read_data
, sizeof(read_data
));
3259 s
.next_read_length(1);
3260 memset(read_buf
, 0, sizeof(read_buf
));
3262 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3263 bindns::bind(async_read_handler
,
3264 _1
, _2
, 1, &called
));
3267 BOOST_ASIO_CHECK(called
);
3268 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3270 s
.reset(read_data
, sizeof(read_data
));
3271 s
.next_read_length(10);
3272 memset(read_buf
, 0, sizeof(read_buf
));
3274 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3275 bindns::bind(async_read_handler
,
3276 _1
, _2
, 10, &called
));
3279 BOOST_ASIO_CHECK(called
);
3280 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3282 s
.reset(read_data
, sizeof(read_data
));
3283 memset(read_buf
, 0, sizeof(read_buf
));
3285 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3286 bindns::bind(async_read_handler
,
3287 _1
, _2
, sizeof(read_data
), &called
));
3290 BOOST_ASIO_CHECK(called
);
3291 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3293 s
.reset(read_data
, sizeof(read_data
));
3294 s
.next_read_length(1);
3295 memset(read_buf
, 0, sizeof(read_buf
));
3297 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3298 bindns::bind(async_read_handler
,
3299 _1
, _2
, 10, &called
));
3302 BOOST_ASIO_CHECK(called
);
3303 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3305 s
.reset(read_data
, sizeof(read_data
));
3306 s
.next_read_length(10);
3307 memset(read_buf
, 0, sizeof(read_buf
));
3309 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3310 bindns::bind(async_read_handler
,
3311 _1
, _2
, 10, &called
));
3314 BOOST_ASIO_CHECK(called
);
3315 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3317 s
.reset(read_data
, sizeof(read_data
));
3318 memset(read_buf
, 0, sizeof(read_buf
));
3320 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
3321 bindns::bind(async_read_handler
,
3322 _1
, _2
, sizeof(read_data
), &called
));
3325 BOOST_ASIO_CHECK(called
);
3326 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3328 s
.reset(read_data
, sizeof(read_data
));
3329 s
.next_read_length(1);
3330 memset(read_buf
, 0, sizeof(read_buf
));
3332 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
3333 bindns::bind(async_read_handler
,
3334 _1
, _2
, 42, &called
));
3337 BOOST_ASIO_CHECK(called
);
3338 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3340 s
.reset(read_data
, sizeof(read_data
));
3341 s
.next_read_length(10);
3342 memset(read_buf
, 0, sizeof(read_buf
));
3344 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
3345 bindns::bind(async_read_handler
,
3346 _1
, _2
, 50, &called
));
3349 BOOST_ASIO_CHECK(called
);
3350 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 50));
3352 s
.reset(read_data
, sizeof(read_data
));
3353 memset(read_buf
, 0, sizeof(read_buf
));
3355 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3356 bindns::bind(async_read_handler
,
3357 _1
, _2
, 1, &called
));
3360 BOOST_ASIO_CHECK(called
);
3361 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3363 s
.reset(read_data
, sizeof(read_data
));
3364 s
.next_read_length(1);
3365 memset(read_buf
, 0, sizeof(read_buf
));
3367 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3368 bindns::bind(async_read_handler
,
3369 _1
, _2
, 1, &called
));
3372 BOOST_ASIO_CHECK(called
);
3373 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3375 s
.reset(read_data
, sizeof(read_data
));
3376 s
.next_read_length(10);
3377 memset(read_buf
, 0, sizeof(read_buf
));
3379 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3380 bindns::bind(async_read_handler
,
3381 _1
, _2
, 1, &called
));
3384 BOOST_ASIO_CHECK(called
);
3385 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3387 s
.reset(read_data
, sizeof(read_data
));
3388 memset(read_buf
, 0, sizeof(read_buf
));
3390 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3391 bindns::bind(async_read_handler
,
3392 _1
, _2
, 10, &called
));
3395 BOOST_ASIO_CHECK(called
);
3396 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3398 s
.reset(read_data
, sizeof(read_data
));
3399 s
.next_read_length(1);
3400 memset(read_buf
, 0, sizeof(read_buf
));
3402 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3403 bindns::bind(async_read_handler
,
3404 _1
, _2
, 10, &called
));
3407 BOOST_ASIO_CHECK(called
);
3408 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3410 s
.reset(read_data
, sizeof(read_data
));
3411 s
.next_read_length(10);
3412 memset(read_buf
, 0, sizeof(read_buf
));
3414 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3415 bindns::bind(async_read_handler
,
3416 _1
, _2
, 10, &called
));
3419 BOOST_ASIO_CHECK(called
);
3420 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3422 s
.reset(read_data
, sizeof(read_data
));
3423 memset(read_buf
, 0, sizeof(read_buf
));
3425 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3426 bindns::bind(async_read_handler
,
3427 _1
, _2
, 42, &called
));
3430 BOOST_ASIO_CHECK(called
);
3431 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3433 s
.reset(read_data
, sizeof(read_data
));
3434 s
.next_read_length(1);
3435 memset(read_buf
, 0, sizeof(read_buf
));
3437 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3438 bindns::bind(async_read_handler
,
3439 _1
, _2
, 42, &called
));
3442 BOOST_ASIO_CHECK(called
);
3443 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3445 s
.reset(read_data
, sizeof(read_data
));
3446 s
.next_read_length(10);
3447 memset(read_buf
, 0, sizeof(read_buf
));
3449 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3450 bindns::bind(async_read_handler
,
3451 _1
, _2
, 42, &called
));
3454 BOOST_ASIO_CHECK(called
);
3455 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3457 s
.reset(read_data
, sizeof(read_data
));
3458 memset(read_buf
, 0, sizeof(read_buf
));
3460 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3461 bindns::bind(async_read_handler
,
3462 _1
, _2
, sizeof(read_data
), &called
));
3465 BOOST_ASIO_CHECK(called
);
3466 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3468 s
.reset(read_data
, sizeof(read_data
));
3469 s
.next_read_length(1);
3470 memset(read_buf
, 0, sizeof(read_buf
));
3472 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3473 bindns::bind(async_read_handler
,
3474 _1
, _2
, sizeof(read_data
), &called
));
3477 BOOST_ASIO_CHECK(called
);
3478 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3480 s
.reset(read_data
, sizeof(read_data
));
3481 s
.next_read_length(10);
3482 memset(read_buf
, 0, sizeof(read_buf
));
3484 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3485 bindns::bind(async_read_handler
,
3486 _1
, _2
, sizeof(read_data
), &called
));
3489 BOOST_ASIO_CHECK(called
);
3490 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3492 s
.reset(read_data
, sizeof(read_data
));
3493 memset(read_buf
, 0, sizeof(read_buf
));
3495 boost::asio::async_read(s
, buffers
, short_transfer(),
3496 bindns::bind(async_read_handler
,
3497 _1
, _2
, sizeof(read_data
), &called
));
3500 BOOST_ASIO_CHECK(called
);
3501 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3503 s
.reset(read_data
, sizeof(read_data
));
3504 s
.next_read_length(1);
3505 memset(read_buf
, 0, sizeof(read_buf
));
3507 boost::asio::async_read(s
, buffers
, short_transfer(),
3508 bindns::bind(async_read_handler
,
3509 _1
, _2
, sizeof(read_data
), &called
));
3512 BOOST_ASIO_CHECK(called
);
3513 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3515 s
.reset(read_data
, sizeof(read_data
));
3516 s
.next_read_length(10);
3517 memset(read_buf
, 0, sizeof(read_buf
));
3519 boost::asio::async_read(s
, buffers
, short_transfer(),
3520 bindns::bind(async_read_handler
,
3521 _1
, _2
, sizeof(read_data
), &called
));
3524 BOOST_ASIO_CHECK(called
);
3525 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3527 s
.reset(read_data
, sizeof(read_data
));
3528 memset(read_buf
, 0, sizeof(read_buf
));
3529 int i
= boost::asio::async_read(s
, buffers
,
3530 short_transfer(), archetypes::lazy_handler());
3531 BOOST_ASIO_CHECK(i
== 42);
3534 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3535 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
3538 void test_4_arg_std_array_buffers_async_read()
3540 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3541 namespace bindns
= boost
;
3542 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3543 namespace bindns
= std
;
3544 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3545 using bindns::placeholders::_1
;
3546 using bindns::placeholders::_2
;
3548 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
3549 boost::asio::io_context ioc
;
3551 char read_buf
[sizeof(read_data
)];
3552 std::array
<boost::asio::mutable_buffer
, 2> buffers
= { {
3553 boost::asio::buffer(read_buf
, 32),
3554 boost::asio::buffer(read_buf
) + 32 } };
3556 s
.reset(read_data
, sizeof(read_data
));
3557 memset(read_buf
, 0, sizeof(read_buf
));
3558 bool called
= false;
3559 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3560 bindns::bind(async_read_handler
,
3561 _1
, _2
, sizeof(read_data
), &called
));
3564 BOOST_ASIO_CHECK(called
);
3565 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3567 s
.reset(read_data
, sizeof(read_data
));
3568 s
.next_read_length(1);
3569 memset(read_buf
, 0, sizeof(read_buf
));
3571 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3572 bindns::bind(async_read_handler
,
3573 _1
, _2
, sizeof(read_data
), &called
));
3576 BOOST_ASIO_CHECK(called
);
3577 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3579 s
.reset(read_data
, sizeof(read_data
));
3580 s
.next_read_length(10);
3581 memset(read_buf
, 0, sizeof(read_buf
));
3583 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3584 bindns::bind(async_read_handler
,
3585 _1
, _2
, sizeof(read_data
), &called
));
3588 BOOST_ASIO_CHECK(called
);
3589 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3591 s
.reset(read_data
, sizeof(read_data
));
3592 memset(read_buf
, 0, sizeof(read_buf
));
3594 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3595 bindns::bind(async_read_handler
,
3596 _1
, _2
, sizeof(read_data
), &called
));
3599 BOOST_ASIO_CHECK(called
);
3600 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3602 s
.reset(read_data
, sizeof(read_data
));
3603 s
.next_read_length(1);
3604 memset(read_buf
, 0, sizeof(read_buf
));
3606 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3607 bindns::bind(async_read_handler
,
3608 _1
, _2
, 1, &called
));
3611 BOOST_ASIO_CHECK(called
);
3612 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3614 s
.reset(read_data
, sizeof(read_data
));
3615 s
.next_read_length(10);
3616 memset(read_buf
, 0, sizeof(read_buf
));
3618 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3619 bindns::bind(async_read_handler
,
3620 _1
, _2
, 10, &called
));
3623 BOOST_ASIO_CHECK(called
);
3624 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3626 s
.reset(read_data
, sizeof(read_data
));
3627 memset(read_buf
, 0, sizeof(read_buf
));
3629 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3630 bindns::bind(async_read_handler
,
3631 _1
, _2
, sizeof(read_data
), &called
));
3634 BOOST_ASIO_CHECK(called
);
3635 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3637 s
.reset(read_data
, sizeof(read_data
));
3638 s
.next_read_length(1);
3639 memset(read_buf
, 0, sizeof(read_buf
));
3641 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3642 bindns::bind(async_read_handler
,
3643 _1
, _2
, 10, &called
));
3646 BOOST_ASIO_CHECK(called
);
3647 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3649 s
.reset(read_data
, sizeof(read_data
));
3650 s
.next_read_length(10);
3651 memset(read_buf
, 0, sizeof(read_buf
));
3653 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3654 bindns::bind(async_read_handler
,
3655 _1
, _2
, 10, &called
));
3658 BOOST_ASIO_CHECK(called
);
3659 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3661 s
.reset(read_data
, sizeof(read_data
));
3662 memset(read_buf
, 0, sizeof(read_buf
));
3664 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
3665 bindns::bind(async_read_handler
,
3666 _1
, _2
, sizeof(read_data
), &called
));
3669 BOOST_ASIO_CHECK(called
);
3670 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3672 s
.reset(read_data
, sizeof(read_data
));
3673 s
.next_read_length(1);
3674 memset(read_buf
, 0, sizeof(read_buf
));
3676 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
3677 bindns::bind(async_read_handler
,
3678 _1
, _2
, 42, &called
));
3681 BOOST_ASIO_CHECK(called
);
3682 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3684 s
.reset(read_data
, sizeof(read_data
));
3685 s
.next_read_length(10);
3686 memset(read_buf
, 0, sizeof(read_buf
));
3688 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
3689 bindns::bind(async_read_handler
,
3690 _1
, _2
, 50, &called
));
3693 BOOST_ASIO_CHECK(called
);
3694 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 50));
3696 s
.reset(read_data
, sizeof(read_data
));
3697 memset(read_buf
, 0, sizeof(read_buf
));
3699 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3700 bindns::bind(async_read_handler
,
3701 _1
, _2
, 1, &called
));
3704 BOOST_ASIO_CHECK(called
);
3705 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3707 s
.reset(read_data
, sizeof(read_data
));
3708 s
.next_read_length(1);
3709 memset(read_buf
, 0, sizeof(read_buf
));
3711 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3712 bindns::bind(async_read_handler
,
3713 _1
, _2
, 1, &called
));
3716 BOOST_ASIO_CHECK(called
);
3717 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3719 s
.reset(read_data
, sizeof(read_data
));
3720 s
.next_read_length(10);
3721 memset(read_buf
, 0, sizeof(read_buf
));
3723 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
3724 bindns::bind(async_read_handler
,
3725 _1
, _2
, 1, &called
));
3728 BOOST_ASIO_CHECK(called
);
3729 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3731 s
.reset(read_data
, sizeof(read_data
));
3732 memset(read_buf
, 0, sizeof(read_buf
));
3734 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3735 bindns::bind(async_read_handler
,
3736 _1
, _2
, 10, &called
));
3739 BOOST_ASIO_CHECK(called
);
3740 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3742 s
.reset(read_data
, sizeof(read_data
));
3743 s
.next_read_length(1);
3744 memset(read_buf
, 0, sizeof(read_buf
));
3746 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3747 bindns::bind(async_read_handler
,
3748 _1
, _2
, 10, &called
));
3751 BOOST_ASIO_CHECK(called
);
3752 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3754 s
.reset(read_data
, sizeof(read_data
));
3755 s
.next_read_length(10);
3756 memset(read_buf
, 0, sizeof(read_buf
));
3758 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
3759 bindns::bind(async_read_handler
,
3760 _1
, _2
, 10, &called
));
3763 BOOST_ASIO_CHECK(called
);
3764 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3766 s
.reset(read_data
, sizeof(read_data
));
3767 memset(read_buf
, 0, sizeof(read_buf
));
3769 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3770 bindns::bind(async_read_handler
,
3771 _1
, _2
, 42, &called
));
3774 BOOST_ASIO_CHECK(called
);
3775 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3777 s
.reset(read_data
, sizeof(read_data
));
3778 s
.next_read_length(1);
3779 memset(read_buf
, 0, sizeof(read_buf
));
3781 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3782 bindns::bind(async_read_handler
,
3783 _1
, _2
, 42, &called
));
3786 BOOST_ASIO_CHECK(called
);
3787 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3789 s
.reset(read_data
, sizeof(read_data
));
3790 s
.next_read_length(10);
3791 memset(read_buf
, 0, sizeof(read_buf
));
3793 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
3794 bindns::bind(async_read_handler
,
3795 _1
, _2
, 42, &called
));
3798 BOOST_ASIO_CHECK(called
);
3799 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
3801 s
.reset(read_data
, sizeof(read_data
));
3802 memset(read_buf
, 0, sizeof(read_buf
));
3804 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3805 bindns::bind(async_read_handler
,
3806 _1
, _2
, sizeof(read_data
), &called
));
3809 BOOST_ASIO_CHECK(called
);
3810 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3812 s
.reset(read_data
, sizeof(read_data
));
3813 s
.next_read_length(1);
3814 memset(read_buf
, 0, sizeof(read_buf
));
3816 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3817 bindns::bind(async_read_handler
,
3818 _1
, _2
, sizeof(read_data
), &called
));
3821 BOOST_ASIO_CHECK(called
);
3822 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3824 s
.reset(read_data
, sizeof(read_data
));
3825 s
.next_read_length(10);
3826 memset(read_buf
, 0, sizeof(read_buf
));
3828 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
3829 bindns::bind(async_read_handler
,
3830 _1
, _2
, sizeof(read_data
), &called
));
3833 BOOST_ASIO_CHECK(called
);
3834 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3836 s
.reset(read_data
, sizeof(read_data
));
3837 memset(read_buf
, 0, sizeof(read_buf
));
3839 boost::asio::async_read(s
, buffers
, short_transfer(),
3840 bindns::bind(async_read_handler
,
3841 _1
, _2
, sizeof(read_data
), &called
));
3844 BOOST_ASIO_CHECK(called
);
3845 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3847 s
.reset(read_data
, sizeof(read_data
));
3848 s
.next_read_length(1);
3849 memset(read_buf
, 0, sizeof(read_buf
));
3851 boost::asio::async_read(s
, buffers
, short_transfer(),
3852 bindns::bind(async_read_handler
,
3853 _1
, _2
, sizeof(read_data
), &called
));
3856 BOOST_ASIO_CHECK(called
);
3857 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3859 s
.reset(read_data
, sizeof(read_data
));
3860 s
.next_read_length(10);
3861 memset(read_buf
, 0, sizeof(read_buf
));
3863 boost::asio::async_read(s
, buffers
, short_transfer(),
3864 bindns::bind(async_read_handler
,
3865 _1
, _2
, sizeof(read_data
), &called
));
3868 BOOST_ASIO_CHECK(called
);
3869 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3871 s
.reset(read_data
, sizeof(read_data
));
3872 memset(read_buf
, 0, sizeof(read_buf
));
3873 int i
= boost::asio::async_read(s
, buffers
,
3874 short_transfer(), archetypes::lazy_handler());
3875 BOOST_ASIO_CHECK(i
== 42);
3878 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3879 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
3882 void test_4_arg_vector_buffers_async_read()
3884 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3885 namespace bindns
= boost
;
3886 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3887 namespace bindns
= std
;
3888 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3889 using bindns::placeholders::_1
;
3890 using bindns::placeholders::_2
;
3892 boost::asio::io_context ioc
;
3894 char read_buf
[sizeof(read_data
)];
3895 std::vector
<boost::asio::mutable_buffer
> buffers
;
3896 buffers
.push_back(boost::asio::buffer(read_buf
, 32));
3897 buffers
.push_back(boost::asio::buffer(read_buf
, 39) + 32);
3898 buffers
.push_back(boost::asio::buffer(read_buf
) + 39);
3900 s
.reset(read_data
, sizeof(read_data
));
3901 memset(read_buf
, 0, sizeof(read_buf
));
3902 bool called
= false;
3903 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3904 bindns::bind(async_read_handler
,
3905 _1
, _2
, sizeof(read_data
), &called
));
3908 BOOST_ASIO_CHECK(called
);
3909 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3911 s
.reset(read_data
, sizeof(read_data
));
3912 s
.next_read_length(1);
3913 memset(read_buf
, 0, sizeof(read_buf
));
3915 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3916 bindns::bind(async_read_handler
,
3917 _1
, _2
, sizeof(read_data
), &called
));
3920 BOOST_ASIO_CHECK(called
);
3921 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3923 s
.reset(read_data
, sizeof(read_data
));
3924 s
.next_read_length(10);
3925 memset(read_buf
, 0, sizeof(read_buf
));
3927 boost::asio::async_read(s
, buffers
, boost::asio::transfer_all(),
3928 bindns::bind(async_read_handler
,
3929 _1
, _2
, sizeof(read_data
), &called
));
3932 BOOST_ASIO_CHECK(called
);
3933 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3935 s
.reset(read_data
, sizeof(read_data
));
3936 memset(read_buf
, 0, sizeof(read_buf
));
3938 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3939 bindns::bind(async_read_handler
,
3940 _1
, _2
, sizeof(read_data
), &called
));
3943 BOOST_ASIO_CHECK(called
);
3944 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3946 s
.reset(read_data
, sizeof(read_data
));
3947 s
.next_read_length(1);
3948 memset(read_buf
, 0, sizeof(read_buf
));
3950 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3951 bindns::bind(async_read_handler
,
3952 _1
, _2
, 1, &called
));
3955 BOOST_ASIO_CHECK(called
);
3956 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
3958 s
.reset(read_data
, sizeof(read_data
));
3959 s
.next_read_length(10);
3960 memset(read_buf
, 0, sizeof(read_buf
));
3962 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(1),
3963 bindns::bind(async_read_handler
,
3964 _1
, _2
, 10, &called
));
3967 BOOST_ASIO_CHECK(called
);
3968 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3970 s
.reset(read_data
, sizeof(read_data
));
3971 memset(read_buf
, 0, sizeof(read_buf
));
3973 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3974 bindns::bind(async_read_handler
,
3975 _1
, _2
, sizeof(read_data
), &called
));
3978 BOOST_ASIO_CHECK(called
);
3979 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
3981 s
.reset(read_data
, sizeof(read_data
));
3982 s
.next_read_length(1);
3983 memset(read_buf
, 0, sizeof(read_buf
));
3985 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3986 bindns::bind(async_read_handler
,
3987 _1
, _2
, 10, &called
));
3990 BOOST_ASIO_CHECK(called
);
3991 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
3993 s
.reset(read_data
, sizeof(read_data
));
3994 s
.next_read_length(10);
3995 memset(read_buf
, 0, sizeof(read_buf
));
3997 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(10),
3998 bindns::bind(async_read_handler
,
3999 _1
, _2
, 10, &called
));
4002 BOOST_ASIO_CHECK(called
);
4003 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
4005 s
.reset(read_data
, sizeof(read_data
));
4006 memset(read_buf
, 0, sizeof(read_buf
));
4008 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
4009 bindns::bind(async_read_handler
,
4010 _1
, _2
, sizeof(read_data
), &called
));
4013 BOOST_ASIO_CHECK(called
);
4014 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
4016 s
.reset(read_data
, sizeof(read_data
));
4017 s
.next_read_length(1);
4018 memset(read_buf
, 0, sizeof(read_buf
));
4020 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
4021 bindns::bind(async_read_handler
,
4022 _1
, _2
, 42, &called
));
4025 BOOST_ASIO_CHECK(called
);
4026 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
4028 s
.reset(read_data
, sizeof(read_data
));
4029 s
.next_read_length(10);
4030 memset(read_buf
, 0, sizeof(read_buf
));
4032 boost::asio::async_read(s
, buffers
, boost::asio::transfer_at_least(42),
4033 bindns::bind(async_read_handler
,
4034 _1
, _2
, 50, &called
));
4037 BOOST_ASIO_CHECK(called
);
4038 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 50));
4040 s
.reset(read_data
, sizeof(read_data
));
4041 memset(read_buf
, 0, sizeof(read_buf
));
4043 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
4044 bindns::bind(async_read_handler
,
4045 _1
, _2
, 1, &called
));
4048 BOOST_ASIO_CHECK(called
);
4049 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
4051 s
.reset(read_data
, sizeof(read_data
));
4052 s
.next_read_length(1);
4053 memset(read_buf
, 0, sizeof(read_buf
));
4055 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
4056 bindns::bind(async_read_handler
,
4057 _1
, _2
, 1, &called
));
4060 BOOST_ASIO_CHECK(called
);
4061 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
4063 s
.reset(read_data
, sizeof(read_data
));
4064 s
.next_read_length(10);
4065 memset(read_buf
, 0, sizeof(read_buf
));
4067 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(1),
4068 bindns::bind(async_read_handler
,
4069 _1
, _2
, 1, &called
));
4072 BOOST_ASIO_CHECK(called
);
4073 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 1));
4075 s
.reset(read_data
, sizeof(read_data
));
4076 memset(read_buf
, 0, sizeof(read_buf
));
4078 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
4079 bindns::bind(async_read_handler
,
4080 _1
, _2
, 10, &called
));
4083 BOOST_ASIO_CHECK(called
);
4084 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
4086 s
.reset(read_data
, sizeof(read_data
));
4087 s
.next_read_length(1);
4088 memset(read_buf
, 0, sizeof(read_buf
));
4090 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
4091 bindns::bind(async_read_handler
,
4092 _1
, _2
, 10, &called
));
4095 BOOST_ASIO_CHECK(called
);
4096 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
4098 s
.reset(read_data
, sizeof(read_data
));
4099 s
.next_read_length(10);
4100 memset(read_buf
, 0, sizeof(read_buf
));
4102 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(10),
4103 bindns::bind(async_read_handler
,
4104 _1
, _2
, 10, &called
));
4107 BOOST_ASIO_CHECK(called
);
4108 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 10));
4110 s
.reset(read_data
, sizeof(read_data
));
4111 memset(read_buf
, 0, sizeof(read_buf
));
4113 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
4114 bindns::bind(async_read_handler
,
4115 _1
, _2
, 42, &called
));
4118 BOOST_ASIO_CHECK(called
);
4119 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
4121 s
.reset(read_data
, sizeof(read_data
));
4122 s
.next_read_length(1);
4123 memset(read_buf
, 0, sizeof(read_buf
));
4125 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
4126 bindns::bind(async_read_handler
,
4127 _1
, _2
, 42, &called
));
4130 BOOST_ASIO_CHECK(called
);
4131 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
4133 s
.reset(read_data
, sizeof(read_data
));
4134 s
.next_read_length(10);
4135 memset(read_buf
, 0, sizeof(read_buf
));
4137 boost::asio::async_read(s
, buffers
, boost::asio::transfer_exactly(42),
4138 bindns::bind(async_read_handler
,
4139 _1
, _2
, 42, &called
));
4142 BOOST_ASIO_CHECK(called
);
4143 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, 42));
4145 s
.reset(read_data
, sizeof(read_data
));
4146 memset(read_buf
, 0, sizeof(read_buf
));
4148 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
4149 bindns::bind(async_read_handler
,
4150 _1
, _2
, sizeof(read_data
), &called
));
4153 BOOST_ASIO_CHECK(called
);
4154 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
4156 s
.reset(read_data
, sizeof(read_data
));
4157 s
.next_read_length(1);
4158 memset(read_buf
, 0, sizeof(read_buf
));
4160 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
4161 bindns::bind(async_read_handler
,
4162 _1
, _2
, sizeof(read_data
), &called
));
4165 BOOST_ASIO_CHECK(called
);
4166 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
4168 s
.reset(read_data
, sizeof(read_data
));
4169 s
.next_read_length(10);
4170 memset(read_buf
, 0, sizeof(read_buf
));
4172 boost::asio::async_read(s
, buffers
, old_style_transfer_all
,
4173 bindns::bind(async_read_handler
,
4174 _1
, _2
, sizeof(read_data
), &called
));
4177 BOOST_ASIO_CHECK(called
);
4178 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
4180 s
.reset(read_data
, sizeof(read_data
));
4181 memset(read_buf
, 0, sizeof(read_buf
));
4183 boost::asio::async_read(s
, buffers
, short_transfer(),
4184 bindns::bind(async_read_handler
,
4185 _1
, _2
, sizeof(read_data
), &called
));
4188 BOOST_ASIO_CHECK(called
);
4189 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
4191 s
.reset(read_data
, sizeof(read_data
));
4192 s
.next_read_length(1);
4193 memset(read_buf
, 0, sizeof(read_buf
));
4195 boost::asio::async_read(s
, buffers
, short_transfer(),
4196 bindns::bind(async_read_handler
,
4197 _1
, _2
, sizeof(read_data
), &called
));
4200 BOOST_ASIO_CHECK(called
);
4201 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
4203 s
.reset(read_data
, sizeof(read_data
));
4204 s
.next_read_length(10);
4205 memset(read_buf
, 0, sizeof(read_buf
));
4207 boost::asio::async_read(s
, buffers
, short_transfer(),
4208 bindns::bind(async_read_handler
,
4209 _1
, _2
, sizeof(read_data
), &called
));
4212 BOOST_ASIO_CHECK(called
);
4213 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
4215 s
.reset(read_data
, sizeof(read_data
));
4216 memset(read_buf
, 0, sizeof(read_buf
));
4217 int i
= boost::asio::async_read(s
, buffers
,
4218 short_transfer(), archetypes::lazy_handler());
4219 BOOST_ASIO_CHECK(i
== 42);
4222 BOOST_ASIO_CHECK(s
.check_buffers(buffers
, sizeof(read_data
)));
4225 void test_4_arg_dynamic_string_async_read()
4227 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
4228 namespace bindns
= boost
;
4229 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
4230 namespace bindns
= std
;
4231 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
4232 using bindns::placeholders::_1
;
4233 using bindns::placeholders::_2
;
4235 boost::asio::io_context ioc
;
4238 boost::asio::dynamic_string_buffer
<char, std::string::traits_type
,
4239 std::string::allocator_type
> sb
4240 = boost::asio::dynamic_buffer(data
, sizeof(read_data
));
4242 s
.reset(read_data
, sizeof(read_data
));
4243 sb
.consume(sb
.size());
4244 bool called
= false;
4245 boost::asio::async_read(s
, sb
, boost::asio::transfer_all(),
4246 bindns::bind(async_read_handler
,
4247 _1
, _2
, sizeof(read_data
), &called
));
4250 BOOST_ASIO_CHECK(called
);
4251 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4252 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4254 s
.reset(read_data
, sizeof(read_data
));
4255 s
.next_read_length(1);
4256 sb
.consume(sb
.size());
4258 boost::asio::async_read(s
, sb
, boost::asio::transfer_all(),
4259 bindns::bind(async_read_handler
,
4260 _1
, _2
, sizeof(read_data
), &called
));
4263 BOOST_ASIO_CHECK(called
);
4264 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4265 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4267 s
.reset(read_data
, sizeof(read_data
));
4268 s
.next_read_length(10);
4269 sb
.consume(sb
.size());
4271 boost::asio::async_read(s
, sb
, boost::asio::transfer_all(),
4272 bindns::bind(async_read_handler
,
4273 _1
, _2
, sizeof(read_data
), &called
));
4276 BOOST_ASIO_CHECK(called
);
4277 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4278 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4280 s
.reset(read_data
, sizeof(read_data
));
4281 sb
.consume(sb
.size());
4283 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(1),
4284 bindns::bind(async_read_handler
,
4285 _1
, _2
, sizeof(read_data
), &called
));
4288 BOOST_ASIO_CHECK(called
);
4289 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4290 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4292 s
.reset(read_data
, sizeof(read_data
));
4293 s
.next_read_length(1);
4294 sb
.consume(sb
.size());
4296 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(1),
4297 bindns::bind(async_read_handler
,
4298 _1
, _2
, 1, &called
));
4301 BOOST_ASIO_CHECK(called
);
4302 BOOST_ASIO_CHECK(sb
.size() == 1);
4303 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
4305 s
.reset(read_data
, sizeof(read_data
));
4306 s
.next_read_length(10);
4307 sb
.consume(sb
.size());
4309 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(1),
4310 bindns::bind(async_read_handler
,
4311 _1
, _2
, 10, &called
));
4314 BOOST_ASIO_CHECK(called
);
4315 BOOST_ASIO_CHECK(sb
.size() == 10);
4316 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
4318 s
.reset(read_data
, sizeof(read_data
));
4319 sb
.consume(sb
.size());
4321 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(10),
4322 bindns::bind(async_read_handler
,
4323 _1
, _2
, sizeof(read_data
), &called
));
4326 BOOST_ASIO_CHECK(called
);
4327 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4328 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4330 s
.reset(read_data
, sizeof(read_data
));
4331 s
.next_read_length(1);
4332 sb
.consume(sb
.size());
4334 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(10),
4335 bindns::bind(async_read_handler
,
4336 _1
, _2
, 10, &called
));
4339 BOOST_ASIO_CHECK(called
);
4340 BOOST_ASIO_CHECK(sb
.size() == 10);
4341 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
4343 s
.reset(read_data
, sizeof(read_data
));
4344 s
.next_read_length(10);
4345 sb
.consume(sb
.size());
4347 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(10),
4348 bindns::bind(async_read_handler
,
4349 _1
, _2
, 10, &called
));
4352 BOOST_ASIO_CHECK(called
);
4353 BOOST_ASIO_CHECK(sb
.size() == 10);
4354 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
4356 s
.reset(read_data
, sizeof(read_data
));
4357 sb
.consume(sb
.size());
4359 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(42),
4360 bindns::bind(async_read_handler
,
4361 _1
, _2
, sizeof(read_data
), &called
));
4364 BOOST_ASIO_CHECK(called
);
4365 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4366 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4368 s
.reset(read_data
, sizeof(read_data
));
4369 s
.next_read_length(1);
4370 sb
.consume(sb
.size());
4372 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(42),
4373 bindns::bind(async_read_handler
,
4374 _1
, _2
, 42, &called
));
4377 BOOST_ASIO_CHECK(called
);
4378 BOOST_ASIO_CHECK(sb
.size() == 42);
4379 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
4381 s
.reset(read_data
, sizeof(read_data
));
4382 s
.next_read_length(10);
4383 sb
.consume(sb
.size());
4385 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(42),
4386 bindns::bind(async_read_handler
,
4387 _1
, _2
, 50, &called
));
4390 BOOST_ASIO_CHECK(called
);
4391 BOOST_ASIO_CHECK(sb
.size() == 50);
4392 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 50));
4394 s
.reset(read_data
, sizeof(read_data
));
4395 sb
.consume(sb
.size());
4397 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(1),
4398 bindns::bind(async_read_handler
,
4399 _1
, _2
, 1, &called
));
4402 BOOST_ASIO_CHECK(called
);
4403 BOOST_ASIO_CHECK(sb
.size() == 1);
4404 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
4406 s
.reset(read_data
, sizeof(read_data
));
4407 s
.next_read_length(1);
4408 sb
.consume(sb
.size());
4410 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(1),
4411 bindns::bind(async_read_handler
,
4412 _1
, _2
, 1, &called
));
4415 BOOST_ASIO_CHECK(called
);
4416 BOOST_ASIO_CHECK(sb
.size() == 1);
4417 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
4419 s
.reset(read_data
, sizeof(read_data
));
4420 s
.next_read_length(10);
4421 sb
.consume(sb
.size());
4423 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(1),
4424 bindns::bind(async_read_handler
,
4425 _1
, _2
, 1, &called
));
4428 BOOST_ASIO_CHECK(called
);
4429 BOOST_ASIO_CHECK(sb
.size() == 1);
4430 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 1));
4432 s
.reset(read_data
, sizeof(read_data
));
4433 sb
.consume(sb
.size());
4435 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(10),
4436 bindns::bind(async_read_handler
,
4437 _1
, _2
, 10, &called
));
4440 BOOST_ASIO_CHECK(called
);
4441 BOOST_ASIO_CHECK(sb
.size() == 10);
4442 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
4444 s
.reset(read_data
, sizeof(read_data
));
4445 s
.next_read_length(1);
4446 sb
.consume(sb
.size());
4448 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(10),
4449 bindns::bind(async_read_handler
,
4450 _1
, _2
, 10, &called
));
4453 BOOST_ASIO_CHECK(called
);
4454 BOOST_ASIO_CHECK(sb
.size() == 10);
4455 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
4457 s
.reset(read_data
, sizeof(read_data
));
4458 s
.next_read_length(10);
4459 sb
.consume(sb
.size());
4461 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(10),
4462 bindns::bind(async_read_handler
,
4463 _1
, _2
, 10, &called
));
4466 BOOST_ASIO_CHECK(called
);
4467 BOOST_ASIO_CHECK(sb
.size() == 10);
4468 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 10));
4470 s
.reset(read_data
, sizeof(read_data
));
4471 sb
.consume(sb
.size());
4473 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(42),
4474 bindns::bind(async_read_handler
,
4475 _1
, _2
, 42, &called
));
4478 BOOST_ASIO_CHECK(called
);
4479 BOOST_ASIO_CHECK(sb
.size() == 42);
4480 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
4482 s
.reset(read_data
, sizeof(read_data
));
4483 s
.next_read_length(1);
4484 sb
.consume(sb
.size());
4486 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(42),
4487 bindns::bind(async_read_handler
,
4488 _1
, _2
, 42, &called
));
4491 BOOST_ASIO_CHECK(called
);
4492 BOOST_ASIO_CHECK(sb
.size() == 42);
4493 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
4495 s
.reset(read_data
, sizeof(read_data
));
4496 s
.next_read_length(10);
4497 sb
.consume(sb
.size());
4499 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(42),
4500 bindns::bind(async_read_handler
,
4501 _1
, _2
, 42, &called
));
4504 BOOST_ASIO_CHECK(called
);
4505 BOOST_ASIO_CHECK(sb
.size() == 42);
4506 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), 42));
4508 s
.reset(read_data
, sizeof(read_data
));
4509 sb
.consume(sb
.size());
4511 boost::asio::async_read(s
, sb
, old_style_transfer_all
,
4512 bindns::bind(async_read_handler
,
4513 _1
, _2
, sizeof(read_data
), &called
));
4516 BOOST_ASIO_CHECK(called
);
4517 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4518 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4520 s
.reset(read_data
, sizeof(read_data
));
4521 s
.next_read_length(1);
4522 sb
.consume(sb
.size());
4524 boost::asio::async_read(s
, sb
, old_style_transfer_all
,
4525 bindns::bind(async_read_handler
,
4526 _1
, _2
, sizeof(read_data
), &called
));
4529 BOOST_ASIO_CHECK(called
);
4530 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4531 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4533 s
.reset(read_data
, sizeof(read_data
));
4534 s
.next_read_length(10);
4535 sb
.consume(sb
.size());
4537 boost::asio::async_read(s
, sb
, old_style_transfer_all
,
4538 bindns::bind(async_read_handler
,
4539 _1
, _2
, sizeof(read_data
), &called
));
4542 BOOST_ASIO_CHECK(called
);
4543 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4544 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4546 s
.reset(read_data
, sizeof(read_data
));
4547 sb
.consume(sb
.size());
4549 boost::asio::async_read(s
, sb
, short_transfer(),
4550 bindns::bind(async_read_handler
,
4551 _1
, _2
, sizeof(read_data
), &called
));
4554 BOOST_ASIO_CHECK(called
);
4555 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4556 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4558 s
.reset(read_data
, sizeof(read_data
));
4559 s
.next_read_length(1);
4560 sb
.consume(sb
.size());
4562 boost::asio::async_read(s
, sb
, short_transfer(),
4563 bindns::bind(async_read_handler
,
4564 _1
, _2
, sizeof(read_data
), &called
));
4567 BOOST_ASIO_CHECK(called
);
4568 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4569 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4571 s
.reset(read_data
, sizeof(read_data
));
4572 s
.next_read_length(10);
4573 sb
.consume(sb
.size());
4575 boost::asio::async_read(s
, sb
, short_transfer(),
4576 bindns::bind(async_read_handler
,
4577 _1
, _2
, sizeof(read_data
), &called
));
4580 BOOST_ASIO_CHECK(called
);
4581 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4582 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4584 s
.reset(read_data
, sizeof(read_data
));
4585 sb
.consume(sb
.size());
4586 int i
= boost::asio::async_read(s
, sb
,
4587 short_transfer(), archetypes::lazy_handler());
4588 BOOST_ASIO_CHECK(i
== 42);
4591 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4592 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(0, sb
.size()), sizeof(read_data
)));
4595 void test_4_arg_streambuf_async_read()
4597 #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
4598 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
4599 namespace bindns
= boost
;
4600 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
4601 namespace bindns
= std
;
4602 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
4603 using bindns::placeholders::_1
;
4604 using bindns::placeholders::_2
;
4606 boost::asio::io_context ioc
;
4608 boost::asio::streambuf
sb(sizeof(read_data
));
4610 s
.reset(read_data
, sizeof(read_data
));
4611 sb
.consume(sb
.size());
4612 bool called
= false;
4613 boost::asio::async_read(s
, sb
, boost::asio::transfer_all(),
4614 bindns::bind(async_read_handler
,
4615 _1
, _2
, sizeof(read_data
), &called
));
4618 BOOST_ASIO_CHECK(called
);
4619 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4620 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4622 s
.reset(read_data
, sizeof(read_data
));
4623 s
.next_read_length(1);
4624 sb
.consume(sb
.size());
4626 boost::asio::async_read(s
, sb
, boost::asio::transfer_all(),
4627 bindns::bind(async_read_handler
,
4628 _1
, _2
, sizeof(read_data
), &called
));
4631 BOOST_ASIO_CHECK(called
);
4632 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4633 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4635 s
.reset(read_data
, sizeof(read_data
));
4636 s
.next_read_length(10);
4637 sb
.consume(sb
.size());
4639 boost::asio::async_read(s
, sb
, boost::asio::transfer_all(),
4640 bindns::bind(async_read_handler
,
4641 _1
, _2
, sizeof(read_data
), &called
));
4644 BOOST_ASIO_CHECK(called
);
4645 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4646 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4648 s
.reset(read_data
, sizeof(read_data
));
4649 sb
.consume(sb
.size());
4651 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(1),
4652 bindns::bind(async_read_handler
,
4653 _1
, _2
, sizeof(read_data
), &called
));
4656 BOOST_ASIO_CHECK(called
);
4657 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4658 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4660 s
.reset(read_data
, sizeof(read_data
));
4661 s
.next_read_length(1);
4662 sb
.consume(sb
.size());
4664 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(1),
4665 bindns::bind(async_read_handler
,
4666 _1
, _2
, 1, &called
));
4669 BOOST_ASIO_CHECK(called
);
4670 BOOST_ASIO_CHECK(sb
.size() == 1);
4671 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
4673 s
.reset(read_data
, sizeof(read_data
));
4674 s
.next_read_length(10);
4675 sb
.consume(sb
.size());
4677 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(1),
4678 bindns::bind(async_read_handler
,
4679 _1
, _2
, 10, &called
));
4682 BOOST_ASIO_CHECK(called
);
4683 BOOST_ASIO_CHECK(sb
.size() == 10);
4684 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
4686 s
.reset(read_data
, sizeof(read_data
));
4687 sb
.consume(sb
.size());
4689 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(10),
4690 bindns::bind(async_read_handler
,
4691 _1
, _2
, sizeof(read_data
), &called
));
4694 BOOST_ASIO_CHECK(called
);
4695 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4696 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4698 s
.reset(read_data
, sizeof(read_data
));
4699 s
.next_read_length(1);
4700 sb
.consume(sb
.size());
4702 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(10),
4703 bindns::bind(async_read_handler
,
4704 _1
, _2
, 10, &called
));
4707 BOOST_ASIO_CHECK(called
);
4708 BOOST_ASIO_CHECK(sb
.size() == 10);
4709 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
4711 s
.reset(read_data
, sizeof(read_data
));
4712 s
.next_read_length(10);
4713 sb
.consume(sb
.size());
4715 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(10),
4716 bindns::bind(async_read_handler
,
4717 _1
, _2
, 10, &called
));
4720 BOOST_ASIO_CHECK(called
);
4721 BOOST_ASIO_CHECK(sb
.size() == 10);
4722 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
4724 s
.reset(read_data
, sizeof(read_data
));
4725 sb
.consume(sb
.size());
4727 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(42),
4728 bindns::bind(async_read_handler
,
4729 _1
, _2
, sizeof(read_data
), &called
));
4732 BOOST_ASIO_CHECK(called
);
4733 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4734 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4736 s
.reset(read_data
, sizeof(read_data
));
4737 s
.next_read_length(1);
4738 sb
.consume(sb
.size());
4740 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(42),
4741 bindns::bind(async_read_handler
,
4742 _1
, _2
, 42, &called
));
4745 BOOST_ASIO_CHECK(called
);
4746 BOOST_ASIO_CHECK(sb
.size() == 42);
4747 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
4749 s
.reset(read_data
, sizeof(read_data
));
4750 s
.next_read_length(10);
4751 sb
.consume(sb
.size());
4753 boost::asio::async_read(s
, sb
, boost::asio::transfer_at_least(42),
4754 bindns::bind(async_read_handler
,
4755 _1
, _2
, 50, &called
));
4758 BOOST_ASIO_CHECK(called
);
4759 BOOST_ASIO_CHECK(sb
.size() == 50);
4760 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 50));
4762 s
.reset(read_data
, sizeof(read_data
));
4763 sb
.consume(sb
.size());
4765 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(1),
4766 bindns::bind(async_read_handler
,
4767 _1
, _2
, 1, &called
));
4770 BOOST_ASIO_CHECK(called
);
4771 BOOST_ASIO_CHECK(sb
.size() == 1);
4772 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
4774 s
.reset(read_data
, sizeof(read_data
));
4775 s
.next_read_length(1);
4776 sb
.consume(sb
.size());
4778 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(1),
4779 bindns::bind(async_read_handler
,
4780 _1
, _2
, 1, &called
));
4783 BOOST_ASIO_CHECK(called
);
4784 BOOST_ASIO_CHECK(sb
.size() == 1);
4785 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
4787 s
.reset(read_data
, sizeof(read_data
));
4788 s
.next_read_length(10);
4789 sb
.consume(sb
.size());
4791 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(1),
4792 bindns::bind(async_read_handler
,
4793 _1
, _2
, 1, &called
));
4796 BOOST_ASIO_CHECK(called
);
4797 BOOST_ASIO_CHECK(sb
.size() == 1);
4798 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 1));
4800 s
.reset(read_data
, sizeof(read_data
));
4801 sb
.consume(sb
.size());
4803 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(10),
4804 bindns::bind(async_read_handler
,
4805 _1
, _2
, 10, &called
));
4808 BOOST_ASIO_CHECK(called
);
4809 BOOST_ASIO_CHECK(sb
.size() == 10);
4810 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
4812 s
.reset(read_data
, sizeof(read_data
));
4813 s
.next_read_length(1);
4814 sb
.consume(sb
.size());
4816 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(10),
4817 bindns::bind(async_read_handler
,
4818 _1
, _2
, 10, &called
));
4821 BOOST_ASIO_CHECK(called
);
4822 BOOST_ASIO_CHECK(sb
.size() == 10);
4823 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
4825 s
.reset(read_data
, sizeof(read_data
));
4826 s
.next_read_length(10);
4827 sb
.consume(sb
.size());
4829 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(10),
4830 bindns::bind(async_read_handler
,
4831 _1
, _2
, 10, &called
));
4834 BOOST_ASIO_CHECK(called
);
4835 BOOST_ASIO_CHECK(sb
.size() == 10);
4836 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 10));
4838 s
.reset(read_data
, sizeof(read_data
));
4839 sb
.consume(sb
.size());
4841 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(42),
4842 bindns::bind(async_read_handler
,
4843 _1
, _2
, 42, &called
));
4846 BOOST_ASIO_CHECK(called
);
4847 BOOST_ASIO_CHECK(sb
.size() == 42);
4848 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
4850 s
.reset(read_data
, sizeof(read_data
));
4851 s
.next_read_length(1);
4852 sb
.consume(sb
.size());
4854 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(42),
4855 bindns::bind(async_read_handler
,
4856 _1
, _2
, 42, &called
));
4859 BOOST_ASIO_CHECK(called
);
4860 BOOST_ASIO_CHECK(sb
.size() == 42);
4861 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
4863 s
.reset(read_data
, sizeof(read_data
));
4864 s
.next_read_length(10);
4865 sb
.consume(sb
.size());
4867 boost::asio::async_read(s
, sb
, boost::asio::transfer_exactly(42),
4868 bindns::bind(async_read_handler
,
4869 _1
, _2
, 42, &called
));
4872 BOOST_ASIO_CHECK(called
);
4873 BOOST_ASIO_CHECK(sb
.size() == 42);
4874 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), 42));
4876 s
.reset(read_data
, sizeof(read_data
));
4877 sb
.consume(sb
.size());
4879 boost::asio::async_read(s
, sb
, old_style_transfer_all
,
4880 bindns::bind(async_read_handler
,
4881 _1
, _2
, sizeof(read_data
), &called
));
4884 BOOST_ASIO_CHECK(called
);
4885 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4886 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4888 s
.reset(read_data
, sizeof(read_data
));
4889 s
.next_read_length(1);
4890 sb
.consume(sb
.size());
4892 boost::asio::async_read(s
, sb
, old_style_transfer_all
,
4893 bindns::bind(async_read_handler
,
4894 _1
, _2
, sizeof(read_data
), &called
));
4897 BOOST_ASIO_CHECK(called
);
4898 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4899 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4901 s
.reset(read_data
, sizeof(read_data
));
4902 s
.next_read_length(10);
4903 sb
.consume(sb
.size());
4905 boost::asio::async_read(s
, sb
, old_style_transfer_all
,
4906 bindns::bind(async_read_handler
,
4907 _1
, _2
, sizeof(read_data
), &called
));
4910 BOOST_ASIO_CHECK(called
);
4911 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4912 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4914 s
.reset(read_data
, sizeof(read_data
));
4915 sb
.consume(sb
.size());
4917 boost::asio::async_read(s
, sb
, short_transfer(),
4918 bindns::bind(async_read_handler
,
4919 _1
, _2
, sizeof(read_data
), &called
));
4922 BOOST_ASIO_CHECK(called
);
4923 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4924 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4926 s
.reset(read_data
, sizeof(read_data
));
4927 s
.next_read_length(1);
4928 sb
.consume(sb
.size());
4930 boost::asio::async_read(s
, sb
, short_transfer(),
4931 bindns::bind(async_read_handler
,
4932 _1
, _2
, sizeof(read_data
), &called
));
4935 BOOST_ASIO_CHECK(called
);
4936 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4937 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4939 s
.reset(read_data
, sizeof(read_data
));
4940 s
.next_read_length(10);
4941 sb
.consume(sb
.size());
4943 boost::asio::async_read(s
, sb
, short_transfer(),
4944 bindns::bind(async_read_handler
,
4945 _1
, _2
, sizeof(read_data
), &called
));
4948 BOOST_ASIO_CHECK(called
);
4949 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4950 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4952 s
.reset(read_data
, sizeof(read_data
));
4953 sb
.consume(sb
.size());
4954 int i
= boost::asio::async_read(s
, sb
,
4955 short_transfer(), archetypes::lazy_handler());
4956 BOOST_ASIO_CHECK(i
== 42);
4959 BOOST_ASIO_CHECK(sb
.size() == sizeof(read_data
));
4960 BOOST_ASIO_CHECK(s
.check_buffers(sb
.data(), sizeof(read_data
)));
4961 #endif // !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
4964 BOOST_ASIO_TEST_SUITE
4967 BOOST_ASIO_TEST_CASE(test_2_arg_zero_buffers_read
)
4968 BOOST_ASIO_TEST_CASE(test_2_arg_mutable_buffer_read
)
4969 BOOST_ASIO_TEST_CASE(test_2_arg_vector_buffers_read
)
4970 BOOST_ASIO_TEST_CASE(test_2_arg_dynamic_string_read
)
4971 BOOST_ASIO_TEST_CASE(test_2_arg_streambuf_read
)
4972 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_zero_buffers_read
)
4973 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_mutable_buffer_read
)
4974 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_vector_buffers_read
)
4975 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_dynamic_string_read
)
4976 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_streambuf_read
)
4977 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffer_read
)
4978 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_read
)
4979 BOOST_ASIO_TEST_CASE(test_3_arg_dynamic_string_read
)
4980 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_read
)
4981 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_read
)
4982 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_read
)
4983 BOOST_ASIO_TEST_CASE(test_4_arg_dynamic_string_read
)
4984 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_read
)
4985 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffer_async_read
)
4986 BOOST_ASIO_TEST_CASE(test_3_arg_boost_array_buffers_async_read
)
4987 BOOST_ASIO_TEST_CASE(test_3_arg_std_array_buffers_async_read
)
4988 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_async_read
)
4989 BOOST_ASIO_TEST_CASE(test_3_arg_dynamic_string_async_read
)
4990 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_async_read
)
4991 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffer_async_read
)
4992 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_async_read
)
4993 BOOST_ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_read
)
4994 BOOST_ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_read
)
4995 BOOST_ASIO_TEST_CASE(test_4_arg_dynamic_string_async_read
)
4996 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_async_read
)