5 // Copyright (c) 2003-2017 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_service.hpp>
23 #include <boost/asio/streambuf.hpp>
24 #include "unit_test.hpp"
26 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
27 # include <boost/bind.hpp>
28 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
29 # include <functional>
30 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
32 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
33 #include <boost/array.hpp>
34 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
36 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
38 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
40 using namespace std; // For memcmp, memcpy and memset.
45 typedef boost::asio::io_service io_service_type;
47 test_stream(boost::asio::io_service& io_service)
48 : io_service_(io_service),
55 io_service_type& get_io_service()
60 void reset(const void* data, size_t length)
62 BOOST_ASIO_CHECK(length <= max_length);
64 memcpy(data_, data, length);
67 next_read_length_ = length;
70 void next_read_length(size_t length)
72 next_read_length_ = length;
75 template <typename Const_Buffers>
76 bool check_buffers(const Const_Buffers& buffers, size_t length)
78 if (length != position_)
81 typename Const_Buffers::const_iterator iter = buffers.begin();
82 typename Const_Buffers::const_iterator end = buffers.end();
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,
90 boost::asio::buffer_cast<const void*>(*iter), buffer_length) != 0)
92 checked_length += buffer_length;
98 template <typename Mutable_Buffers>
99 size_t read_some(const Mutable_Buffers& buffers)
101 size_t n = boost::asio::buffer_copy(buffers,
102 boost::asio::buffer(data_, length_) + position_,
108 template <typename Mutable_Buffers>
109 size_t read_some(const Mutable_Buffers& buffers,
110 boost::system::error_code& ec)
112 ec = boost::system::error_code();
113 return read_some(buffers);
116 template <typename Mutable_Buffers, typename Handler>
117 void async_read_some(const Mutable_Buffers& buffers, Handler handler)
119 size_t bytes_transferred = read_some(buffers);
120 io_service_.post(boost::asio::detail::bind_handler(
121 handler, boost::system::error_code(), bytes_transferred));
125 io_service_type& io_service_;
126 enum { max_length = 8192 };
127 char data_[max_length];
130 size_t next_read_length_;
133 static const char read_data[]
134 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
136 void test_2_arg_zero_buffers_read()
138 boost::asio::io_service ios;
140 std::vector<boost::asio::mutable_buffer> buffers;
142 size_t bytes_transferred = boost::asio::read(s, buffers);
143 BOOST_ASIO_CHECK(bytes_transferred == 0);
146 void test_2_arg_mutable_buffers_1_read()
148 boost::asio::io_service ios;
150 char read_buf[sizeof(read_data)];
151 boost::asio::mutable_buffers_1 buffers
152 = boost::asio::buffer(read_buf, sizeof(read_buf));
154 s.reset(read_data, sizeof(read_data));
155 memset(read_buf, 0, sizeof(read_buf));
156 size_t bytes_transferred = boost::asio::read(s, buffers);
157 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
158 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
160 s.reset(read_data, sizeof(read_data));
161 s.next_read_length(1);
162 memset(read_buf, 0, sizeof(read_buf));
163 bytes_transferred = boost::asio::read(s, buffers);
164 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
165 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
167 s.reset(read_data, sizeof(read_data));
168 s.next_read_length(10);
169 memset(read_buf, 0, sizeof(read_buf));
170 bytes_transferred = boost::asio::read(s, buffers);
171 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
172 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
175 void test_2_arg_vector_buffers_read()
177 boost::asio::io_service ios;
179 char read_buf[sizeof(read_data)];
180 std::vector<boost::asio::mutable_buffer> buffers;
181 buffers.push_back(boost::asio::buffer(read_buf, 32));
182 buffers.push_back(boost::asio::buffer(read_buf) + 32);
184 s.reset(read_data, sizeof(read_data));
185 memset(read_buf, 0, sizeof(read_buf));
186 size_t bytes_transferred = boost::asio::read(s, buffers);
187 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
188 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
190 s.reset(read_data, sizeof(read_data));
191 s.next_read_length(1);
192 memset(read_buf, 0, sizeof(read_buf));
193 bytes_transferred = boost::asio::read(s, buffers);
194 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
195 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
197 s.reset(read_data, sizeof(read_data));
198 s.next_read_length(10);
199 memset(read_buf, 0, sizeof(read_buf));
200 bytes_transferred = boost::asio::read(s, buffers);
201 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
202 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
205 void test_2_arg_streambuf_read()
207 boost::asio::io_service ios;
209 boost::asio::streambuf sb(sizeof(read_data));
211 s.reset(read_data, sizeof(read_data));
212 sb.consume(sb.size());
213 size_t bytes_transferred = boost::asio::read(s, sb);
214 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
215 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
216 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
218 s.reset(read_data, sizeof(read_data));
219 s.next_read_length(1);
220 sb.consume(sb.size());
221 bytes_transferred = boost::asio::read(s, sb);
222 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
223 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
224 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
226 s.reset(read_data, sizeof(read_data));
227 s.next_read_length(10);
228 sb.consume(sb.size());
229 bytes_transferred = boost::asio::read(s, sb);
230 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
231 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
232 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
235 void test_3_arg_nothrow_zero_buffers_read()
237 boost::asio::io_service ios;
239 std::vector<boost::asio::mutable_buffer> buffers;
241 boost::system::error_code error;
242 size_t bytes_transferred = boost::asio::read(s, buffers, error);
243 BOOST_ASIO_CHECK(bytes_transferred == 0);
244 BOOST_ASIO_CHECK(!error);
247 void test_3_arg_nothrow_mutable_buffers_1_read()
249 boost::asio::io_service ios;
251 char read_buf[sizeof(read_data)];
252 boost::asio::mutable_buffers_1 buffers
253 = boost::asio::buffer(read_buf, sizeof(read_buf));
255 s.reset(read_data, sizeof(read_data));
256 memset(read_buf, 0, sizeof(read_buf));
257 boost::system::error_code error;
258 size_t bytes_transferred = boost::asio::read(s, buffers, error);
259 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
260 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
261 BOOST_ASIO_CHECK(!error);
263 s.reset(read_data, sizeof(read_data));
264 s.next_read_length(1);
265 memset(read_buf, 0, sizeof(read_buf));
266 bytes_transferred = boost::asio::read(s, buffers, error);
267 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
268 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
269 BOOST_ASIO_CHECK(!error);
271 s.reset(read_data, sizeof(read_data));
272 s.next_read_length(10);
273 memset(read_buf, 0, sizeof(read_buf));
274 bytes_transferred = boost::asio::read(s, buffers, error);
275 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
276 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
277 BOOST_ASIO_CHECK(!error);
280 void test_3_arg_nothrow_vector_buffers_read()
282 boost::asio::io_service ios;
284 char read_buf[sizeof(read_data)];
285 std::vector<boost::asio::mutable_buffer> buffers;
286 buffers.push_back(boost::asio::buffer(read_buf, 32));
287 buffers.push_back(boost::asio::buffer(read_buf) + 32);
289 s.reset(read_data, sizeof(read_data));
290 memset(read_buf, 0, sizeof(read_buf));
291 boost::system::error_code error;
292 size_t bytes_transferred = boost::asio::read(s, buffers, error);
293 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
294 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
295 BOOST_ASIO_CHECK(!error);
297 s.reset(read_data, sizeof(read_data));
298 s.next_read_length(1);
299 memset(read_buf, 0, sizeof(read_buf));
300 bytes_transferred = boost::asio::read(s, buffers, error);
301 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
302 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
303 BOOST_ASIO_CHECK(!error);
305 s.reset(read_data, sizeof(read_data));
306 s.next_read_length(10);
307 memset(read_buf, 0, sizeof(read_buf));
308 bytes_transferred = boost::asio::read(s, buffers, error);
309 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
310 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
311 BOOST_ASIO_CHECK(!error);
314 void test_3_arg_nothrow_streambuf_read()
316 boost::asio::io_service ios;
318 boost::asio::streambuf sb(sizeof(read_data));
320 s.reset(read_data, sizeof(read_data));
321 sb.consume(sb.size());
322 boost::system::error_code error;
323 size_t bytes_transferred = boost::asio::read(s, sb, error);
324 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
325 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
326 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
327 BOOST_ASIO_CHECK(!error);
329 s.reset(read_data, sizeof(read_data));
330 s.next_read_length(1);
331 sb.consume(sb.size());
332 bytes_transferred = boost::asio::read(s, sb, error);
333 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
334 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
335 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
336 BOOST_ASIO_CHECK(!error);
338 s.reset(read_data, sizeof(read_data));
339 s.next_read_length(10);
340 sb.consume(sb.size());
341 bytes_transferred = boost::asio::read(s, sb, error);
342 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
343 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
344 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
345 BOOST_ASIO_CHECK(!error);
348 bool old_style_transfer_all(const boost::system::error_code& ec,
349 size_t /*bytes_transferred*/)
354 size_t short_transfer(const boost::system::error_code& ec,
355 size_t /*bytes_transferred*/)
360 void test_3_arg_mutable_buffers_1_read()
362 boost::asio::io_service ios;
364 char read_buf[sizeof(read_data)];
365 boost::asio::mutable_buffers_1 buffers
366 = boost::asio::buffer(read_buf, sizeof(read_buf));
368 s.reset(read_data, sizeof(read_data));
369 memset(read_buf, 0, sizeof(read_buf));
370 size_t bytes_transferred = boost::asio::read(s, buffers,
371 boost::asio::transfer_all());
372 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
373 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
375 s.reset(read_data, sizeof(read_data));
376 s.next_read_length(1);
377 memset(read_buf, 0, sizeof(read_buf));
378 bytes_transferred = boost::asio::read(s, buffers,
379 boost::asio::transfer_all());
380 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
381 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
383 s.reset(read_data, sizeof(read_data));
384 s.next_read_length(10);
385 memset(read_buf, 0, sizeof(read_buf));
386 bytes_transferred = boost::asio::read(s, buffers,
387 boost::asio::transfer_all());
388 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
389 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
391 s.reset(read_data, sizeof(read_data));
392 memset(read_buf, 0, sizeof(read_buf));
393 bytes_transferred = boost::asio::read(s, buffers,
394 boost::asio::transfer_at_least(1));
395 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
396 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
398 s.reset(read_data, sizeof(read_data));
399 s.next_read_length(1);
400 memset(read_buf, 0, sizeof(read_buf));
401 bytes_transferred = boost::asio::read(s, buffers,
402 boost::asio::transfer_at_least(1));
403 BOOST_ASIO_CHECK(bytes_transferred == 1);
404 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
406 s.reset(read_data, sizeof(read_data));
407 s.next_read_length(10);
408 memset(read_buf, 0, sizeof(read_buf));
409 bytes_transferred = boost::asio::read(s, buffers,
410 boost::asio::transfer_at_least(1));
411 BOOST_ASIO_CHECK(bytes_transferred == 10);
412 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
414 s.reset(read_data, sizeof(read_data));
415 memset(read_buf, 0, sizeof(read_buf));
416 bytes_transferred = boost::asio::read(s, buffers,
417 boost::asio::transfer_at_least(10));
418 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
419 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
421 s.reset(read_data, sizeof(read_data));
422 s.next_read_length(1);
423 memset(read_buf, 0, sizeof(read_buf));
424 bytes_transferred = boost::asio::read(s, buffers,
425 boost::asio::transfer_at_least(10));
426 BOOST_ASIO_CHECK(bytes_transferred == 10);
427 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
429 s.reset(read_data, sizeof(read_data));
430 s.next_read_length(10);
431 memset(read_buf, 0, sizeof(read_buf));
432 bytes_transferred = boost::asio::read(s, buffers,
433 boost::asio::transfer_at_least(10));
434 BOOST_ASIO_CHECK(bytes_transferred == 10);
435 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
437 s.reset(read_data, sizeof(read_data));
438 memset(read_buf, 0, sizeof(read_buf));
439 bytes_transferred = boost::asio::read(s, buffers,
440 boost::asio::transfer_at_least(42));
441 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
442 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
444 s.reset(read_data, sizeof(read_data));
445 s.next_read_length(1);
446 memset(read_buf, 0, sizeof(read_buf));
447 bytes_transferred = boost::asio::read(s, buffers,
448 boost::asio::transfer_at_least(42));
449 BOOST_ASIO_CHECK(bytes_transferred == 42);
450 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
452 s.reset(read_data, sizeof(read_data));
453 s.next_read_length(10);
454 memset(read_buf, 0, sizeof(read_buf));
455 bytes_transferred = boost::asio::read(s, buffers,
456 boost::asio::transfer_at_least(42));
457 BOOST_ASIO_CHECK(bytes_transferred == 50);
458 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
460 s.reset(read_data, sizeof(read_data));
461 memset(read_buf, 0, sizeof(read_buf));
462 bytes_transferred = boost::asio::read(s, buffers,
463 boost::asio::transfer_exactly(1));
464 BOOST_ASIO_CHECK(bytes_transferred == 1);
465 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
467 s.reset(read_data, sizeof(read_data));
468 s.next_read_length(1);
469 memset(read_buf, 0, sizeof(read_buf));
470 bytes_transferred = boost::asio::read(s, buffers,
471 boost::asio::transfer_exactly(1));
472 BOOST_ASIO_CHECK(bytes_transferred == 1);
473 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
475 s.reset(read_data, sizeof(read_data));
476 s.next_read_length(10);
477 memset(read_buf, 0, sizeof(read_buf));
478 bytes_transferred = boost::asio::read(s, buffers,
479 boost::asio::transfer_exactly(1));
480 BOOST_ASIO_CHECK(bytes_transferred == 1);
481 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
483 s.reset(read_data, sizeof(read_data));
484 memset(read_buf, 0, sizeof(read_buf));
485 bytes_transferred = boost::asio::read(s, buffers,
486 boost::asio::transfer_exactly(10));
487 BOOST_ASIO_CHECK(bytes_transferred == 10);
488 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
490 s.reset(read_data, sizeof(read_data));
491 s.next_read_length(1);
492 memset(read_buf, 0, sizeof(read_buf));
493 bytes_transferred = boost::asio::read(s, buffers,
494 boost::asio::transfer_exactly(10));
495 BOOST_ASIO_CHECK(bytes_transferred == 10);
496 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
498 s.reset(read_data, sizeof(read_data));
499 s.next_read_length(10);
500 memset(read_buf, 0, sizeof(read_buf));
501 bytes_transferred = boost::asio::read(s, buffers,
502 boost::asio::transfer_exactly(10));
503 BOOST_ASIO_CHECK(bytes_transferred == 10);
504 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
506 s.reset(read_data, sizeof(read_data));
507 memset(read_buf, 0, sizeof(read_buf));
508 bytes_transferred = boost::asio::read(s, buffers,
509 boost::asio::transfer_exactly(42));
510 BOOST_ASIO_CHECK(bytes_transferred == 42);
511 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
513 s.reset(read_data, sizeof(read_data));
514 s.next_read_length(1);
515 memset(read_buf, 0, sizeof(read_buf));
516 bytes_transferred = boost::asio::read(s, buffers,
517 boost::asio::transfer_exactly(42));
518 BOOST_ASIO_CHECK(bytes_transferred == 42);
519 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
521 s.reset(read_data, sizeof(read_data));
522 s.next_read_length(10);
523 memset(read_buf, 0, sizeof(read_buf));
524 bytes_transferred = boost::asio::read(s, buffers,
525 boost::asio::transfer_exactly(42));
526 BOOST_ASIO_CHECK(bytes_transferred == 42);
527 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
529 s.reset(read_data, sizeof(read_data));
530 memset(read_buf, 0, sizeof(read_buf));
531 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
532 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
533 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
535 s.reset(read_data, sizeof(read_data));
536 s.next_read_length(1);
537 memset(read_buf, 0, sizeof(read_buf));
538 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
539 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
540 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
542 s.reset(read_data, sizeof(read_data));
543 s.next_read_length(10);
544 memset(read_buf, 0, sizeof(read_buf));
545 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
546 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
547 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
549 s.reset(read_data, sizeof(read_data));
550 memset(read_buf, 0, sizeof(read_buf));
551 bytes_transferred = boost::asio::read(s, buffers, short_transfer);
552 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
553 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
555 s.reset(read_data, sizeof(read_data));
556 s.next_read_length(1);
557 memset(read_buf, 0, sizeof(read_buf));
558 bytes_transferred = boost::asio::read(s, buffers, short_transfer);
559 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
560 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
562 s.reset(read_data, sizeof(read_data));
563 s.next_read_length(10);
564 memset(read_buf, 0, sizeof(read_buf));
565 bytes_transferred = boost::asio::read(s, buffers, short_transfer);
566 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
567 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
570 void test_3_arg_vector_buffers_read()
572 boost::asio::io_service ios;
574 char read_buf[sizeof(read_data)];
575 std::vector<boost::asio::mutable_buffer> buffers;
576 buffers.push_back(boost::asio::buffer(read_buf, 32));
577 buffers.push_back(boost::asio::buffer(read_buf) + 32);
579 s.reset(read_data, sizeof(read_data));
580 memset(read_buf, 0, sizeof(read_buf));
581 size_t bytes_transferred = boost::asio::read(s, buffers,
582 boost::asio::transfer_all());
583 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
584 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
586 s.reset(read_data, sizeof(read_data));
587 s.next_read_length(1);
588 memset(read_buf, 0, sizeof(read_buf));
589 bytes_transferred = boost::asio::read(s, buffers,
590 boost::asio::transfer_all());
591 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
592 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
594 s.reset(read_data, sizeof(read_data));
595 s.next_read_length(10);
596 memset(read_buf, 0, sizeof(read_buf));
597 bytes_transferred = boost::asio::read(s, buffers,
598 boost::asio::transfer_all());
599 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
600 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
602 s.reset(read_data, sizeof(read_data));
603 memset(read_buf, 0, sizeof(read_buf));
604 bytes_transferred = boost::asio::read(s, buffers,
605 boost::asio::transfer_at_least(1));
606 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
607 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
609 s.reset(read_data, sizeof(read_data));
610 s.next_read_length(1);
611 memset(read_buf, 0, sizeof(read_buf));
612 bytes_transferred = boost::asio::read(s, buffers,
613 boost::asio::transfer_at_least(1));
614 BOOST_ASIO_CHECK(bytes_transferred == 1);
615 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
617 s.reset(read_data, sizeof(read_data));
618 s.next_read_length(10);
619 memset(read_buf, 0, sizeof(read_buf));
620 bytes_transferred = boost::asio::read(s, buffers,
621 boost::asio::transfer_at_least(1));
622 BOOST_ASIO_CHECK(bytes_transferred == 10);
623 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
625 s.reset(read_data, sizeof(read_data));
626 memset(read_buf, 0, sizeof(read_buf));
627 bytes_transferred = boost::asio::read(s, buffers,
628 boost::asio::transfer_at_least(10));
629 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
630 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
632 s.reset(read_data, sizeof(read_data));
633 s.next_read_length(1);
634 memset(read_buf, 0, sizeof(read_buf));
635 bytes_transferred = boost::asio::read(s, buffers,
636 boost::asio::transfer_at_least(10));
637 BOOST_ASIO_CHECK(bytes_transferred == 10);
638 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
640 s.reset(read_data, sizeof(read_data));
641 s.next_read_length(10);
642 memset(read_buf, 0, sizeof(read_buf));
643 bytes_transferred = boost::asio::read(s, buffers,
644 boost::asio::transfer_at_least(10));
645 BOOST_ASIO_CHECK(bytes_transferred == 10);
646 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
648 s.reset(read_data, sizeof(read_data));
649 memset(read_buf, 0, sizeof(read_buf));
650 bytes_transferred = boost::asio::read(s, buffers,
651 boost::asio::transfer_at_least(42));
652 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
653 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
655 s.reset(read_data, sizeof(read_data));
656 s.next_read_length(1);
657 memset(read_buf, 0, sizeof(read_buf));
658 bytes_transferred = boost::asio::read(s, buffers,
659 boost::asio::transfer_at_least(42));
660 BOOST_ASIO_CHECK(bytes_transferred == 42);
661 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
663 s.reset(read_data, sizeof(read_data));
664 s.next_read_length(10);
665 memset(read_buf, 0, sizeof(read_buf));
666 bytes_transferred = boost::asio::read(s, buffers,
667 boost::asio::transfer_at_least(42));
668 BOOST_ASIO_CHECK(bytes_transferred == 50);
669 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
671 s.reset(read_data, sizeof(read_data));
672 memset(read_buf, 0, sizeof(read_buf));
673 bytes_transferred = boost::asio::read(s, buffers,
674 boost::asio::transfer_exactly(1));
675 BOOST_ASIO_CHECK(bytes_transferred == 1);
676 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
678 s.reset(read_data, sizeof(read_data));
679 s.next_read_length(1);
680 memset(read_buf, 0, sizeof(read_buf));
681 bytes_transferred = boost::asio::read(s, buffers,
682 boost::asio::transfer_exactly(1));
683 BOOST_ASIO_CHECK(bytes_transferred == 1);
684 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
686 s.reset(read_data, sizeof(read_data));
687 s.next_read_length(10);
688 memset(read_buf, 0, sizeof(read_buf));
689 bytes_transferred = boost::asio::read(s, buffers,
690 boost::asio::transfer_exactly(1));
691 BOOST_ASIO_CHECK(bytes_transferred == 1);
692 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
694 s.reset(read_data, sizeof(read_data));
695 memset(read_buf, 0, sizeof(read_buf));
696 bytes_transferred = boost::asio::read(s, buffers,
697 boost::asio::transfer_exactly(10));
698 BOOST_ASIO_CHECK(bytes_transferred == 10);
699 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
701 s.reset(read_data, sizeof(read_data));
702 s.next_read_length(1);
703 memset(read_buf, 0, sizeof(read_buf));
704 bytes_transferred = boost::asio::read(s, buffers,
705 boost::asio::transfer_exactly(10));
706 BOOST_ASIO_CHECK(bytes_transferred == 10);
707 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
709 s.reset(read_data, sizeof(read_data));
710 s.next_read_length(10);
711 memset(read_buf, 0, sizeof(read_buf));
712 bytes_transferred = boost::asio::read(s, buffers,
713 boost::asio::transfer_exactly(10));
714 BOOST_ASIO_CHECK(bytes_transferred == 10);
715 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
717 s.reset(read_data, sizeof(read_data));
718 memset(read_buf, 0, sizeof(read_buf));
719 bytes_transferred = boost::asio::read(s, buffers,
720 boost::asio::transfer_exactly(42));
721 BOOST_ASIO_CHECK(bytes_transferred == 42);
722 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
724 s.reset(read_data, sizeof(read_data));
725 s.next_read_length(1);
726 memset(read_buf, 0, sizeof(read_buf));
727 bytes_transferred = boost::asio::read(s, buffers,
728 boost::asio::transfer_exactly(42));
729 BOOST_ASIO_CHECK(bytes_transferred == 42);
730 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
732 s.reset(read_data, sizeof(read_data));
733 s.next_read_length(10);
734 memset(read_buf, 0, sizeof(read_buf));
735 bytes_transferred = boost::asio::read(s, buffers,
736 boost::asio::transfer_exactly(42));
737 BOOST_ASIO_CHECK(bytes_transferred == 42);
738 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
740 s.reset(read_data, sizeof(read_data));
741 memset(read_buf, 0, sizeof(read_buf));
742 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
743 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
744 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
746 s.reset(read_data, sizeof(read_data));
747 s.next_read_length(1);
748 memset(read_buf, 0, sizeof(read_buf));
749 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
750 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
751 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
753 s.reset(read_data, sizeof(read_data));
754 s.next_read_length(10);
755 memset(read_buf, 0, sizeof(read_buf));
756 bytes_transferred = boost::asio::read(s, buffers, old_style_transfer_all);
757 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
758 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
760 s.reset(read_data, sizeof(read_data));
761 memset(read_buf, 0, sizeof(read_buf));
762 bytes_transferred = boost::asio::read(s, buffers, short_transfer);
763 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
764 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
766 s.reset(read_data, sizeof(read_data));
767 s.next_read_length(1);
768 memset(read_buf, 0, sizeof(read_buf));
769 bytes_transferred = boost::asio::read(s, buffers, short_transfer);
770 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
771 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
773 s.reset(read_data, sizeof(read_data));
774 s.next_read_length(10);
775 memset(read_buf, 0, sizeof(read_buf));
776 bytes_transferred = boost::asio::read(s, buffers, short_transfer);
777 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
778 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
781 void test_3_arg_streambuf_read()
783 boost::asio::io_service ios;
785 boost::asio::streambuf sb(sizeof(read_data));
787 s.reset(read_data, sizeof(read_data));
788 sb.consume(sb.size());
789 size_t bytes_transferred = boost::asio::read(s, sb,
790 boost::asio::transfer_all());
791 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
792 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
793 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
795 s.reset(read_data, sizeof(read_data));
796 s.next_read_length(1);
797 sb.consume(sb.size());
798 bytes_transferred = boost::asio::read(s, sb,
799 boost::asio::transfer_all());
800 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
801 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
802 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
804 s.reset(read_data, sizeof(read_data));
805 s.next_read_length(10);
806 sb.consume(sb.size());
807 bytes_transferred = boost::asio::read(s, sb,
808 boost::asio::transfer_all());
809 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
810 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
811 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
813 s.reset(read_data, sizeof(read_data));
814 sb.consume(sb.size());
815 bytes_transferred = boost::asio::read(s, sb,
816 boost::asio::transfer_at_least(1));
817 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
818 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
819 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
821 s.reset(read_data, sizeof(read_data));
822 s.next_read_length(1);
823 sb.consume(sb.size());
824 bytes_transferred = boost::asio::read(s, sb,
825 boost::asio::transfer_at_least(1));
826 BOOST_ASIO_CHECK(bytes_transferred == 1);
827 BOOST_ASIO_CHECK(sb.size() == 1);
828 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
830 s.reset(read_data, sizeof(read_data));
831 s.next_read_length(10);
832 sb.consume(sb.size());
833 bytes_transferred = boost::asio::read(s, sb,
834 boost::asio::transfer_at_least(1));
835 BOOST_ASIO_CHECK(bytes_transferred == 10);
836 BOOST_ASIO_CHECK(sb.size() == 10);
837 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
839 s.reset(read_data, sizeof(read_data));
840 sb.consume(sb.size());
841 bytes_transferred = boost::asio::read(s, sb,
842 boost::asio::transfer_at_least(10));
843 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
844 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
845 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
847 s.reset(read_data, sizeof(read_data));
848 s.next_read_length(1);
849 sb.consume(sb.size());
850 bytes_transferred = boost::asio::read(s, sb,
851 boost::asio::transfer_at_least(10));
852 BOOST_ASIO_CHECK(bytes_transferred == 10);
853 BOOST_ASIO_CHECK(sb.size() == 10);
854 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
856 s.reset(read_data, sizeof(read_data));
857 s.next_read_length(10);
858 sb.consume(sb.size());
859 bytes_transferred = boost::asio::read(s, sb,
860 boost::asio::transfer_at_least(10));
861 BOOST_ASIO_CHECK(bytes_transferred == 10);
862 BOOST_ASIO_CHECK(sb.size() == 10);
863 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
865 s.reset(read_data, sizeof(read_data));
866 sb.consume(sb.size());
867 bytes_transferred = boost::asio::read(s, sb,
868 boost::asio::transfer_at_least(42));
869 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
870 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
871 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
873 s.reset(read_data, sizeof(read_data));
874 s.next_read_length(1);
875 sb.consume(sb.size());
876 bytes_transferred = boost::asio::read(s, sb,
877 boost::asio::transfer_at_least(42));
878 BOOST_ASIO_CHECK(bytes_transferred == 42);
879 BOOST_ASIO_CHECK(sb.size() == 42);
880 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
882 s.reset(read_data, sizeof(read_data));
883 s.next_read_length(10);
884 sb.consume(sb.size());
885 bytes_transferred = boost::asio::read(s, sb,
886 boost::asio::transfer_at_least(42));
887 BOOST_ASIO_CHECK(bytes_transferred == 50);
888 BOOST_ASIO_CHECK(sb.size() == 50);
889 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 50));
891 s.reset(read_data, sizeof(read_data));
892 sb.consume(sb.size());
893 bytes_transferred = boost::asio::read(s, sb,
894 boost::asio::transfer_exactly(1));
895 BOOST_ASIO_CHECK(bytes_transferred == 1);
896 BOOST_ASIO_CHECK(sb.size() == 1);
897 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
899 s.reset(read_data, sizeof(read_data));
900 s.next_read_length(1);
901 sb.consume(sb.size());
902 bytes_transferred = boost::asio::read(s, sb,
903 boost::asio::transfer_exactly(1));
904 BOOST_ASIO_CHECK(bytes_transferred == 1);
905 BOOST_ASIO_CHECK(sb.size() == 1);
906 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
908 s.reset(read_data, sizeof(read_data));
909 s.next_read_length(10);
910 sb.consume(sb.size());
911 bytes_transferred = boost::asio::read(s, sb,
912 boost::asio::transfer_exactly(1));
913 BOOST_ASIO_CHECK(bytes_transferred == 1);
914 BOOST_ASIO_CHECK(sb.size() == 1);
915 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
917 s.reset(read_data, sizeof(read_data));
918 sb.consume(sb.size());
919 bytes_transferred = boost::asio::read(s, sb,
920 boost::asio::transfer_exactly(10));
921 BOOST_ASIO_CHECK(bytes_transferred == 10);
922 BOOST_ASIO_CHECK(sb.size() == 10);
923 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
925 s.reset(read_data, sizeof(read_data));
926 s.next_read_length(1);
927 sb.consume(sb.size());
928 bytes_transferred = boost::asio::read(s, sb,
929 boost::asio::transfer_exactly(10));
930 BOOST_ASIO_CHECK(bytes_transferred == 10);
931 BOOST_ASIO_CHECK(sb.size() == 10);
932 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
934 s.reset(read_data, sizeof(read_data));
935 s.next_read_length(10);
936 sb.consume(sb.size());
937 bytes_transferred = boost::asio::read(s, sb,
938 boost::asio::transfer_exactly(10));
939 BOOST_ASIO_CHECK(bytes_transferred == 10);
940 BOOST_ASIO_CHECK(sb.size() == 10);
941 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
943 s.reset(read_data, sizeof(read_data));
944 sb.consume(sb.size());
945 bytes_transferred = boost::asio::read(s, sb,
946 boost::asio::transfer_exactly(42));
947 BOOST_ASIO_CHECK(bytes_transferred == 42);
948 BOOST_ASIO_CHECK(sb.size() == 42);
949 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
951 s.reset(read_data, sizeof(read_data));
952 s.next_read_length(1);
953 sb.consume(sb.size());
954 bytes_transferred = boost::asio::read(s, sb,
955 boost::asio::transfer_exactly(42));
956 BOOST_ASIO_CHECK(bytes_transferred == 42);
957 BOOST_ASIO_CHECK(sb.size() == 42);
958 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
960 s.reset(read_data, sizeof(read_data));
961 s.next_read_length(10);
962 sb.consume(sb.size());
963 bytes_transferred = boost::asio::read(s, sb,
964 boost::asio::transfer_exactly(42));
965 BOOST_ASIO_CHECK(bytes_transferred == 42);
966 BOOST_ASIO_CHECK(sb.size() == 42);
967 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
969 s.reset(read_data, sizeof(read_data));
970 sb.consume(sb.size());
971 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
972 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
973 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
974 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
976 s.reset(read_data, sizeof(read_data));
977 s.next_read_length(1);
978 sb.consume(sb.size());
979 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
980 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
981 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
982 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
984 s.reset(read_data, sizeof(read_data));
985 s.next_read_length(10);
986 sb.consume(sb.size());
987 bytes_transferred = boost::asio::read(s, sb, old_style_transfer_all);
988 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
989 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
990 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
992 s.reset(read_data, sizeof(read_data));
993 sb.consume(sb.size());
994 bytes_transferred = boost::asio::read(s, sb, short_transfer);
995 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
996 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
997 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
999 s.reset(read_data, sizeof(read_data));
1000 s.next_read_length(1);
1001 sb.consume(sb.size());
1002 bytes_transferred = boost::asio::read(s, sb, short_transfer);
1003 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1004 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1005 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1007 s.reset(read_data, sizeof(read_data));
1008 s.next_read_length(10);
1009 sb.consume(sb.size());
1010 bytes_transferred = boost::asio::read(s, sb, short_transfer);
1011 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1012 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1013 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1016 void test_4_arg_mutable_buffers_1_read()
1018 boost::asio::io_service ios;
1020 char read_buf[sizeof(read_data)];
1021 boost::asio::mutable_buffers_1 buffers
1022 = boost::asio::buffer(read_buf, sizeof(read_buf));
1024 s.reset(read_data, sizeof(read_data));
1025 memset(read_buf, 0, sizeof(read_buf));
1026 boost::system::error_code error;
1027 size_t bytes_transferred = boost::asio::read(s, buffers,
1028 boost::asio::transfer_all(), error);
1029 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1030 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1031 BOOST_ASIO_CHECK(!error);
1033 s.reset(read_data, sizeof(read_data));
1034 s.next_read_length(1);
1035 memset(read_buf, 0, sizeof(read_buf));
1036 error = boost::system::error_code();
1037 bytes_transferred = boost::asio::read(s, buffers,
1038 boost::asio::transfer_all(), error);
1039 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1040 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1041 BOOST_ASIO_CHECK(!error);
1043 s.reset(read_data, sizeof(read_data));
1044 s.next_read_length(10);
1045 memset(read_buf, 0, sizeof(read_buf));
1046 error = boost::system::error_code();
1047 bytes_transferred = boost::asio::read(s, buffers,
1048 boost::asio::transfer_all(), error);
1049 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1050 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1051 BOOST_ASIO_CHECK(!error);
1053 s.reset(read_data, sizeof(read_data));
1054 memset(read_buf, 0, sizeof(read_buf));
1055 error = boost::system::error_code();
1056 bytes_transferred = boost::asio::read(s, buffers,
1057 boost::asio::transfer_at_least(1), error);
1058 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1059 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1060 BOOST_ASIO_CHECK(!error);
1062 s.reset(read_data, sizeof(read_data));
1063 s.next_read_length(1);
1064 memset(read_buf, 0, sizeof(read_buf));
1065 error = boost::system::error_code();
1066 bytes_transferred = boost::asio::read(s, buffers,
1067 boost::asio::transfer_at_least(1), error);
1068 BOOST_ASIO_CHECK(bytes_transferred == 1);
1069 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1070 BOOST_ASIO_CHECK(!error);
1072 s.reset(read_data, sizeof(read_data));
1073 s.next_read_length(10);
1074 memset(read_buf, 0, sizeof(read_buf));
1075 error = boost::system::error_code();
1076 bytes_transferred = boost::asio::read(s, buffers,
1077 boost::asio::transfer_at_least(1), error);
1078 BOOST_ASIO_CHECK(bytes_transferred == 10);
1079 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1080 BOOST_ASIO_CHECK(!error);
1082 s.reset(read_data, sizeof(read_data));
1083 memset(read_buf, 0, sizeof(read_buf));
1084 error = boost::system::error_code();
1085 bytes_transferred = boost::asio::read(s, buffers,
1086 boost::asio::transfer_at_least(10), error);
1087 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1088 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1089 BOOST_ASIO_CHECK(!error);
1091 s.reset(read_data, sizeof(read_data));
1092 s.next_read_length(1);
1093 memset(read_buf, 0, sizeof(read_buf));
1094 error = boost::system::error_code();
1095 bytes_transferred = boost::asio::read(s, buffers,
1096 boost::asio::transfer_at_least(10), error);
1097 BOOST_ASIO_CHECK(bytes_transferred == 10);
1098 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1099 BOOST_ASIO_CHECK(!error);
1101 s.reset(read_data, sizeof(read_data));
1102 s.next_read_length(10);
1103 memset(read_buf, 0, sizeof(read_buf));
1104 error = boost::system::error_code();
1105 bytes_transferred = boost::asio::read(s, buffers,
1106 boost::asio::transfer_at_least(10), error);
1107 BOOST_ASIO_CHECK(bytes_transferred == 10);
1108 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1109 BOOST_ASIO_CHECK(!error);
1111 s.reset(read_data, sizeof(read_data));
1112 memset(read_buf, 0, sizeof(read_buf));
1113 error = boost::system::error_code();
1114 bytes_transferred = boost::asio::read(s, buffers,
1115 boost::asio::transfer_at_least(42), error);
1116 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1117 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1118 BOOST_ASIO_CHECK(!error);
1120 s.reset(read_data, sizeof(read_data));
1121 s.next_read_length(1);
1122 memset(read_buf, 0, sizeof(read_buf));
1123 error = boost::system::error_code();
1124 bytes_transferred = boost::asio::read(s, buffers,
1125 boost::asio::transfer_at_least(42), error);
1126 BOOST_ASIO_CHECK(bytes_transferred == 42);
1127 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1128 BOOST_ASIO_CHECK(!error);
1130 s.reset(read_data, sizeof(read_data));
1131 s.next_read_length(10);
1132 memset(read_buf, 0, sizeof(read_buf));
1133 error = boost::system::error_code();
1134 bytes_transferred = boost::asio::read(s, buffers,
1135 boost::asio::transfer_at_least(42), error);
1136 BOOST_ASIO_CHECK(bytes_transferred == 50);
1137 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
1138 BOOST_ASIO_CHECK(!error);
1140 s.reset(read_data, sizeof(read_data));
1141 memset(read_buf, 0, sizeof(read_buf));
1142 error = boost::system::error_code();
1143 bytes_transferred = boost::asio::read(s, buffers,
1144 boost::asio::transfer_exactly(1), error);
1145 BOOST_ASIO_CHECK(bytes_transferred == 1);
1146 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1147 BOOST_ASIO_CHECK(!error);
1149 s.reset(read_data, sizeof(read_data));
1150 s.next_read_length(1);
1151 memset(read_buf, 0, sizeof(read_buf));
1152 error = boost::system::error_code();
1153 bytes_transferred = boost::asio::read(s, buffers,
1154 boost::asio::transfer_exactly(1), error);
1155 BOOST_ASIO_CHECK(bytes_transferred == 1);
1156 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1157 BOOST_ASIO_CHECK(!error);
1159 s.reset(read_data, sizeof(read_data));
1160 s.next_read_length(10);
1161 memset(read_buf, 0, sizeof(read_buf));
1162 error = boost::system::error_code();
1163 bytes_transferred = boost::asio::read(s, buffers,
1164 boost::asio::transfer_exactly(1), error);
1165 BOOST_ASIO_CHECK(bytes_transferred == 1);
1166 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1167 BOOST_ASIO_CHECK(!error);
1169 s.reset(read_data, sizeof(read_data));
1170 memset(read_buf, 0, sizeof(read_buf));
1171 error = boost::system::error_code();
1172 bytes_transferred = boost::asio::read(s, buffers,
1173 boost::asio::transfer_exactly(10), error);
1174 BOOST_ASIO_CHECK(bytes_transferred == 10);
1175 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1176 BOOST_ASIO_CHECK(!error);
1178 s.reset(read_data, sizeof(read_data));
1179 s.next_read_length(1);
1180 memset(read_buf, 0, sizeof(read_buf));
1181 error = boost::system::error_code();
1182 bytes_transferred = boost::asio::read(s, buffers,
1183 boost::asio::transfer_exactly(10), error);
1184 BOOST_ASIO_CHECK(bytes_transferred == 10);
1185 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1186 BOOST_ASIO_CHECK(!error);
1188 s.reset(read_data, sizeof(read_data));
1189 s.next_read_length(10);
1190 memset(read_buf, 0, sizeof(read_buf));
1191 error = boost::system::error_code();
1192 bytes_transferred = boost::asio::read(s, buffers,
1193 boost::asio::transfer_exactly(10), error);
1194 BOOST_ASIO_CHECK(bytes_transferred == 10);
1195 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1196 BOOST_ASIO_CHECK(!error);
1198 s.reset(read_data, sizeof(read_data));
1199 memset(read_buf, 0, sizeof(read_buf));
1200 error = boost::system::error_code();
1201 bytes_transferred = boost::asio::read(s, buffers,
1202 boost::asio::transfer_exactly(42), error);
1203 BOOST_ASIO_CHECK(bytes_transferred == 42);
1204 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1205 BOOST_ASIO_CHECK(!error);
1207 s.reset(read_data, sizeof(read_data));
1208 s.next_read_length(1);
1209 memset(read_buf, 0, sizeof(read_buf));
1210 error = boost::system::error_code();
1211 bytes_transferred = boost::asio::read(s, buffers,
1212 boost::asio::transfer_exactly(42), error);
1213 BOOST_ASIO_CHECK(bytes_transferred == 42);
1214 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1215 BOOST_ASIO_CHECK(!error);
1217 s.reset(read_data, sizeof(read_data));
1218 s.next_read_length(10);
1219 memset(read_buf, 0, sizeof(read_buf));
1220 error = boost::system::error_code();
1221 bytes_transferred = boost::asio::read(s, buffers,
1222 boost::asio::transfer_exactly(42), error);
1223 BOOST_ASIO_CHECK(bytes_transferred == 42);
1224 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1225 BOOST_ASIO_CHECK(!error);
1227 s.reset(read_data, sizeof(read_data));
1228 memset(read_buf, 0, sizeof(read_buf));
1229 bytes_transferred = boost::asio::read(s, buffers,
1230 old_style_transfer_all, error);
1231 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1232 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1233 BOOST_ASIO_CHECK(!error);
1235 s.reset(read_data, sizeof(read_data));
1236 s.next_read_length(1);
1237 memset(read_buf, 0, sizeof(read_buf));
1238 error = boost::system::error_code();
1239 bytes_transferred = boost::asio::read(s, buffers,
1240 old_style_transfer_all, error);
1241 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1242 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1243 BOOST_ASIO_CHECK(!error);
1245 s.reset(read_data, sizeof(read_data));
1246 s.next_read_length(10);
1247 memset(read_buf, 0, sizeof(read_buf));
1248 error = boost::system::error_code();
1249 bytes_transferred = boost::asio::read(s, buffers,
1250 old_style_transfer_all, error);
1251 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1252 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1253 BOOST_ASIO_CHECK(!error);
1255 s.reset(read_data, sizeof(read_data));
1256 memset(read_buf, 0, sizeof(read_buf));
1257 bytes_transferred = boost::asio::read(s, buffers, short_transfer, error);
1258 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1259 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1260 BOOST_ASIO_CHECK(!error);
1262 s.reset(read_data, sizeof(read_data));
1263 s.next_read_length(1);
1264 memset(read_buf, 0, sizeof(read_buf));
1265 error = boost::system::error_code();
1266 bytes_transferred = boost::asio::read(s, buffers, short_transfer, error);
1267 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1268 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1269 BOOST_ASIO_CHECK(!error);
1271 s.reset(read_data, sizeof(read_data));
1272 s.next_read_length(10);
1273 memset(read_buf, 0, sizeof(read_buf));
1274 error = boost::system::error_code();
1275 bytes_transferred = boost::asio::read(s, buffers, short_transfer, error);
1276 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1277 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1278 BOOST_ASIO_CHECK(!error);
1281 void test_4_arg_vector_buffers_read()
1283 boost::asio::io_service ios;
1285 char read_buf[sizeof(read_data)];
1286 std::vector<boost::asio::mutable_buffer> buffers;
1287 buffers.push_back(boost::asio::buffer(read_buf, 32));
1288 buffers.push_back(boost::asio::buffer(read_buf) + 32);
1290 s.reset(read_data, sizeof(read_data));
1291 memset(read_buf, 0, sizeof(read_buf));
1292 boost::system::error_code error;
1293 size_t bytes_transferred = boost::asio::read(s, buffers,
1294 boost::asio::transfer_all(), error);
1295 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1296 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1297 BOOST_ASIO_CHECK(!error);
1299 s.reset(read_data, sizeof(read_data));
1300 s.next_read_length(1);
1301 memset(read_buf, 0, sizeof(read_buf));
1302 error = boost::system::error_code();
1303 bytes_transferred = boost::asio::read(s, buffers,
1304 boost::asio::transfer_all(), error);
1305 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1306 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1307 BOOST_ASIO_CHECK(!error);
1309 s.reset(read_data, sizeof(read_data));
1310 s.next_read_length(10);
1311 memset(read_buf, 0, sizeof(read_buf));
1312 error = boost::system::error_code();
1313 bytes_transferred = boost::asio::read(s, buffers,
1314 boost::asio::transfer_all(), error);
1315 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1316 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1317 BOOST_ASIO_CHECK(!error);
1319 s.reset(read_data, sizeof(read_data));
1320 memset(read_buf, 0, sizeof(read_buf));
1321 error = boost::system::error_code();
1322 bytes_transferred = boost::asio::read(s, buffers,
1323 boost::asio::transfer_at_least(1), error);
1324 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1325 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1326 BOOST_ASIO_CHECK(!error);
1328 s.reset(read_data, sizeof(read_data));
1329 s.next_read_length(1);
1330 memset(read_buf, 0, sizeof(read_buf));
1331 error = boost::system::error_code();
1332 bytes_transferred = boost::asio::read(s, buffers,
1333 boost::asio::transfer_at_least(1), error);
1334 BOOST_ASIO_CHECK(bytes_transferred == 1);
1335 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1336 BOOST_ASIO_CHECK(!error);
1338 s.reset(read_data, sizeof(read_data));
1339 s.next_read_length(10);
1340 memset(read_buf, 0, sizeof(read_buf));
1341 error = boost::system::error_code();
1342 bytes_transferred = boost::asio::read(s, buffers,
1343 boost::asio::transfer_at_least(1), error);
1344 BOOST_ASIO_CHECK(bytes_transferred == 10);
1345 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1346 BOOST_ASIO_CHECK(!error);
1348 s.reset(read_data, sizeof(read_data));
1349 memset(read_buf, 0, sizeof(read_buf));
1350 error = boost::system::error_code();
1351 bytes_transferred = boost::asio::read(s, buffers,
1352 boost::asio::transfer_at_least(10), error);
1353 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1354 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1355 BOOST_ASIO_CHECK(!error);
1357 s.reset(read_data, sizeof(read_data));
1358 s.next_read_length(1);
1359 memset(read_buf, 0, sizeof(read_buf));
1360 error = boost::system::error_code();
1361 bytes_transferred = boost::asio::read(s, buffers,
1362 boost::asio::transfer_at_least(10), error);
1363 BOOST_ASIO_CHECK(bytes_transferred == 10);
1364 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1365 BOOST_ASIO_CHECK(!error);
1367 s.reset(read_data, sizeof(read_data));
1368 s.next_read_length(10);
1369 memset(read_buf, 0, sizeof(read_buf));
1370 error = boost::system::error_code();
1371 bytes_transferred = boost::asio::read(s, buffers,
1372 boost::asio::transfer_at_least(10), error);
1373 BOOST_ASIO_CHECK(bytes_transferred == 10);
1374 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1375 BOOST_ASIO_CHECK(!error);
1377 s.reset(read_data, sizeof(read_data));
1378 memset(read_buf, 0, sizeof(read_buf));
1379 error = boost::system::error_code();
1380 bytes_transferred = boost::asio::read(s, buffers,
1381 boost::asio::transfer_at_least(42), error);
1382 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1383 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1384 BOOST_ASIO_CHECK(!error);
1386 s.reset(read_data, sizeof(read_data));
1387 s.next_read_length(1);
1388 memset(read_buf, 0, sizeof(read_buf));
1389 error = boost::system::error_code();
1390 bytes_transferred = boost::asio::read(s, buffers,
1391 boost::asio::transfer_at_least(42), error);
1392 BOOST_ASIO_CHECK(bytes_transferred == 42);
1393 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1394 BOOST_ASIO_CHECK(!error);
1396 s.reset(read_data, sizeof(read_data));
1397 s.next_read_length(10);
1398 memset(read_buf, 0, sizeof(read_buf));
1399 error = boost::system::error_code();
1400 bytes_transferred = boost::asio::read(s, buffers,
1401 boost::asio::transfer_at_least(42), error);
1402 BOOST_ASIO_CHECK(bytes_transferred == 50);
1403 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
1404 BOOST_ASIO_CHECK(!error);
1406 s.reset(read_data, sizeof(read_data));
1407 memset(read_buf, 0, sizeof(read_buf));
1408 error = boost::system::error_code();
1409 bytes_transferred = boost::asio::read(s, buffers,
1410 boost::asio::transfer_exactly(1), error);
1411 BOOST_ASIO_CHECK(bytes_transferred == 1);
1412 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1413 BOOST_ASIO_CHECK(!error);
1415 s.reset(read_data, sizeof(read_data));
1416 s.next_read_length(1);
1417 memset(read_buf, 0, sizeof(read_buf));
1418 error = boost::system::error_code();
1419 bytes_transferred = boost::asio::read(s, buffers,
1420 boost::asio::transfer_exactly(1), error);
1421 BOOST_ASIO_CHECK(bytes_transferred == 1);
1422 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1423 BOOST_ASIO_CHECK(!error);
1425 s.reset(read_data, sizeof(read_data));
1426 s.next_read_length(10);
1427 memset(read_buf, 0, sizeof(read_buf));
1428 error = boost::system::error_code();
1429 bytes_transferred = boost::asio::read(s, buffers,
1430 boost::asio::transfer_exactly(1), error);
1431 BOOST_ASIO_CHECK(bytes_transferred == 1);
1432 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
1433 BOOST_ASIO_CHECK(!error);
1435 s.reset(read_data, sizeof(read_data));
1436 memset(read_buf, 0, sizeof(read_buf));
1437 error = boost::system::error_code();
1438 bytes_transferred = boost::asio::read(s, buffers,
1439 boost::asio::transfer_exactly(10), error);
1440 BOOST_ASIO_CHECK(bytes_transferred == 10);
1441 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1442 BOOST_ASIO_CHECK(!error);
1444 s.reset(read_data, sizeof(read_data));
1445 s.next_read_length(1);
1446 memset(read_buf, 0, sizeof(read_buf));
1447 error = boost::system::error_code();
1448 bytes_transferred = boost::asio::read(s, buffers,
1449 boost::asio::transfer_exactly(10), error);
1450 BOOST_ASIO_CHECK(bytes_transferred == 10);
1451 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1452 BOOST_ASIO_CHECK(!error);
1454 s.reset(read_data, sizeof(read_data));
1455 s.next_read_length(10);
1456 memset(read_buf, 0, sizeof(read_buf));
1457 error = boost::system::error_code();
1458 bytes_transferred = boost::asio::read(s, buffers,
1459 boost::asio::transfer_exactly(10), error);
1460 BOOST_ASIO_CHECK(bytes_transferred == 10);
1461 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
1462 BOOST_ASIO_CHECK(!error);
1464 s.reset(read_data, sizeof(read_data));
1465 memset(read_buf, 0, sizeof(read_buf));
1466 error = boost::system::error_code();
1467 bytes_transferred = boost::asio::read(s, buffers,
1468 boost::asio::transfer_exactly(42), error);
1469 BOOST_ASIO_CHECK(bytes_transferred == 42);
1470 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1471 BOOST_ASIO_CHECK(!error);
1473 s.reset(read_data, sizeof(read_data));
1474 s.next_read_length(1);
1475 memset(read_buf, 0, sizeof(read_buf));
1476 error = boost::system::error_code();
1477 bytes_transferred = boost::asio::read(s, buffers,
1478 boost::asio::transfer_exactly(42), error);
1479 BOOST_ASIO_CHECK(bytes_transferred == 42);
1480 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1481 BOOST_ASIO_CHECK(!error);
1483 s.reset(read_data, sizeof(read_data));
1484 s.next_read_length(10);
1485 memset(read_buf, 0, sizeof(read_buf));
1486 error = boost::system::error_code();
1487 bytes_transferred = boost::asio::read(s, buffers,
1488 boost::asio::transfer_exactly(42), error);
1489 BOOST_ASIO_CHECK(bytes_transferred == 42);
1490 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
1491 BOOST_ASIO_CHECK(!error);
1493 s.reset(read_data, sizeof(read_data));
1494 memset(read_buf, 0, sizeof(read_buf));
1495 bytes_transferred = boost::asio::read(s, buffers,
1496 old_style_transfer_all, error);
1497 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1498 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1499 BOOST_ASIO_CHECK(!error);
1501 s.reset(read_data, sizeof(read_data));
1502 s.next_read_length(1);
1503 memset(read_buf, 0, sizeof(read_buf));
1504 error = boost::system::error_code();
1505 bytes_transferred = boost::asio::read(s, buffers,
1506 old_style_transfer_all, error);
1507 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1508 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1509 BOOST_ASIO_CHECK(!error);
1511 s.reset(read_data, sizeof(read_data));
1512 s.next_read_length(10);
1513 memset(read_buf, 0, sizeof(read_buf));
1514 error = boost::system::error_code();
1515 bytes_transferred = boost::asio::read(s, buffers,
1516 old_style_transfer_all, error);
1517 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1518 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1519 BOOST_ASIO_CHECK(!error);
1521 s.reset(read_data, sizeof(read_data));
1522 memset(read_buf, 0, sizeof(read_buf));
1523 bytes_transferred = boost::asio::read(s, buffers, short_transfer, error);
1524 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1525 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1526 BOOST_ASIO_CHECK(!error);
1528 s.reset(read_data, sizeof(read_data));
1529 s.next_read_length(1);
1530 memset(read_buf, 0, sizeof(read_buf));
1531 error = boost::system::error_code();
1532 bytes_transferred = boost::asio::read(s, buffers, short_transfer, error);
1533 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1534 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1535 BOOST_ASIO_CHECK(!error);
1537 s.reset(read_data, sizeof(read_data));
1538 s.next_read_length(10);
1539 memset(read_buf, 0, sizeof(read_buf));
1540 error = boost::system::error_code();
1541 bytes_transferred = boost::asio::read(s, buffers, short_transfer, error);
1542 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1543 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1544 BOOST_ASIO_CHECK(!error);
1547 void test_4_arg_streambuf_read()
1549 boost::asio::io_service ios;
1551 boost::asio::streambuf sb(sizeof(read_data));
1553 s.reset(read_data, sizeof(read_data));
1554 sb.consume(sb.size());
1555 boost::system::error_code error;
1556 size_t bytes_transferred = boost::asio::read(s, sb,
1557 boost::asio::transfer_all(), error);
1558 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1559 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1560 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1561 BOOST_ASIO_CHECK(!error);
1563 s.reset(read_data, sizeof(read_data));
1564 s.next_read_length(1);
1565 sb.consume(sb.size());
1566 error = boost::system::error_code();
1567 bytes_transferred = boost::asio::read(s, sb,
1568 boost::asio::transfer_all(), error);
1569 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1570 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1571 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1572 BOOST_ASIO_CHECK(!error);
1574 s.reset(read_data, sizeof(read_data));
1575 s.next_read_length(10);
1576 sb.consume(sb.size());
1577 error = boost::system::error_code();
1578 bytes_transferred = boost::asio::read(s, sb,
1579 boost::asio::transfer_all(), error);
1580 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1581 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1582 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1583 BOOST_ASIO_CHECK(!error);
1585 s.reset(read_data, sizeof(read_data));
1586 sb.consume(sb.size());
1587 error = boost::system::error_code();
1588 bytes_transferred = boost::asio::read(s, sb,
1589 boost::asio::transfer_at_least(1), error);
1590 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1591 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1592 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1593 BOOST_ASIO_CHECK(!error);
1595 s.reset(read_data, sizeof(read_data));
1596 s.next_read_length(1);
1597 sb.consume(sb.size());
1598 error = boost::system::error_code();
1599 bytes_transferred = boost::asio::read(s, sb,
1600 boost::asio::transfer_at_least(1), error);
1601 BOOST_ASIO_CHECK(bytes_transferred == 1);
1602 BOOST_ASIO_CHECK(sb.size() == 1);
1603 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
1604 BOOST_ASIO_CHECK(!error);
1606 s.reset(read_data, sizeof(read_data));
1607 s.next_read_length(10);
1608 sb.consume(sb.size());
1609 error = boost::system::error_code();
1610 bytes_transferred = boost::asio::read(s, sb,
1611 boost::asio::transfer_at_least(1), error);
1612 BOOST_ASIO_CHECK(bytes_transferred == 10);
1613 BOOST_ASIO_CHECK(sb.size() == 10);
1614 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
1615 BOOST_ASIO_CHECK(!error);
1617 s.reset(read_data, sizeof(read_data));
1618 sb.consume(sb.size());
1619 error = boost::system::error_code();
1620 bytes_transferred = boost::asio::read(s, sb,
1621 boost::asio::transfer_at_least(10), error);
1622 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1623 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1624 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1625 BOOST_ASIO_CHECK(!error);
1627 s.reset(read_data, sizeof(read_data));
1628 s.next_read_length(1);
1629 sb.consume(sb.size());
1630 error = boost::system::error_code();
1631 bytes_transferred = boost::asio::read(s, sb,
1632 boost::asio::transfer_at_least(10), error);
1633 BOOST_ASIO_CHECK(bytes_transferred == 10);
1634 BOOST_ASIO_CHECK(sb.size() == 10);
1635 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
1636 BOOST_ASIO_CHECK(!error);
1638 s.reset(read_data, sizeof(read_data));
1639 s.next_read_length(10);
1640 sb.consume(sb.size());
1641 error = boost::system::error_code();
1642 bytes_transferred = boost::asio::read(s, sb,
1643 boost::asio::transfer_at_least(10), error);
1644 BOOST_ASIO_CHECK(bytes_transferred == 10);
1645 BOOST_ASIO_CHECK(sb.size() == 10);
1646 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
1647 BOOST_ASIO_CHECK(!error);
1649 s.reset(read_data, sizeof(read_data));
1650 sb.consume(sb.size());
1651 error = boost::system::error_code();
1652 bytes_transferred = boost::asio::read(s, sb,
1653 boost::asio::transfer_at_least(42), error);
1654 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1655 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1656 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1657 BOOST_ASIO_CHECK(!error);
1659 s.reset(read_data, sizeof(read_data));
1660 s.next_read_length(1);
1661 sb.consume(sb.size());
1662 error = boost::system::error_code();
1663 bytes_transferred = boost::asio::read(s, sb,
1664 boost::asio::transfer_at_least(42), error);
1665 BOOST_ASIO_CHECK(bytes_transferred == 42);
1666 BOOST_ASIO_CHECK(sb.size() == 42);
1667 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
1668 BOOST_ASIO_CHECK(!error);
1670 s.reset(read_data, sizeof(read_data));
1671 s.next_read_length(10);
1672 sb.consume(sb.size());
1673 error = boost::system::error_code();
1674 bytes_transferred = boost::asio::read(s, sb,
1675 boost::asio::transfer_at_least(42), error);
1676 BOOST_ASIO_CHECK(bytes_transferred == 50);
1677 BOOST_ASIO_CHECK(sb.size() == 50);
1678 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 50));
1679 BOOST_ASIO_CHECK(!error);
1681 s.reset(read_data, sizeof(read_data));
1682 sb.consume(sb.size());
1683 error = boost::system::error_code();
1684 bytes_transferred = boost::asio::read(s, sb,
1685 boost::asio::transfer_exactly(1), error);
1686 BOOST_ASIO_CHECK(bytes_transferred == 1);
1687 BOOST_ASIO_CHECK(sb.size() == 1);
1688 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
1689 BOOST_ASIO_CHECK(!error);
1691 s.reset(read_data, sizeof(read_data));
1692 s.next_read_length(1);
1693 sb.consume(sb.size());
1694 error = boost::system::error_code();
1695 bytes_transferred = boost::asio::read(s, sb,
1696 boost::asio::transfer_exactly(1), error);
1697 BOOST_ASIO_CHECK(bytes_transferred == 1);
1698 BOOST_ASIO_CHECK(sb.size() == 1);
1699 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
1700 BOOST_ASIO_CHECK(!error);
1702 s.reset(read_data, sizeof(read_data));
1703 s.next_read_length(10);
1704 sb.consume(sb.size());
1705 error = boost::system::error_code();
1706 bytes_transferred = boost::asio::read(s, sb,
1707 boost::asio::transfer_exactly(1), error);
1708 BOOST_ASIO_CHECK(bytes_transferred == 1);
1709 BOOST_ASIO_CHECK(sb.size() == 1);
1710 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
1711 BOOST_ASIO_CHECK(!error);
1713 s.reset(read_data, sizeof(read_data));
1714 sb.consume(sb.size());
1715 error = boost::system::error_code();
1716 bytes_transferred = boost::asio::read(s, sb,
1717 boost::asio::transfer_exactly(10), error);
1718 BOOST_ASIO_CHECK(bytes_transferred == 10);
1719 BOOST_ASIO_CHECK(sb.size() == 10);
1720 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
1721 BOOST_ASIO_CHECK(!error);
1723 s.reset(read_data, sizeof(read_data));
1724 s.next_read_length(1);
1725 sb.consume(sb.size());
1726 error = boost::system::error_code();
1727 bytes_transferred = boost::asio::read(s, sb,
1728 boost::asio::transfer_exactly(10), error);
1729 BOOST_ASIO_CHECK(bytes_transferred == 10);
1730 BOOST_ASIO_CHECK(sb.size() == 10);
1731 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
1732 BOOST_ASIO_CHECK(!error);
1734 s.reset(read_data, sizeof(read_data));
1735 s.next_read_length(10);
1736 sb.consume(sb.size());
1737 error = boost::system::error_code();
1738 bytes_transferred = boost::asio::read(s, sb,
1739 boost::asio::transfer_exactly(10), error);
1740 BOOST_ASIO_CHECK(bytes_transferred == 10);
1741 BOOST_ASIO_CHECK(sb.size() == 10);
1742 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
1743 BOOST_ASIO_CHECK(!error);
1745 s.reset(read_data, sizeof(read_data));
1746 sb.consume(sb.size());
1747 error = boost::system::error_code();
1748 bytes_transferred = boost::asio::read(s, sb,
1749 boost::asio::transfer_exactly(42), error);
1750 BOOST_ASIO_CHECK(bytes_transferred == 42);
1751 BOOST_ASIO_CHECK(sb.size() == 42);
1752 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
1753 BOOST_ASIO_CHECK(!error);
1755 s.reset(read_data, sizeof(read_data));
1756 s.next_read_length(1);
1757 sb.consume(sb.size());
1758 error = boost::system::error_code();
1759 bytes_transferred = boost::asio::read(s, sb,
1760 boost::asio::transfer_exactly(42), error);
1761 BOOST_ASIO_CHECK(bytes_transferred == 42);
1762 BOOST_ASIO_CHECK(sb.size() == 42);
1763 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
1764 BOOST_ASIO_CHECK(!error);
1766 s.reset(read_data, sizeof(read_data));
1767 s.next_read_length(10);
1768 sb.consume(sb.size());
1769 error = boost::system::error_code();
1770 bytes_transferred = boost::asio::read(s, sb,
1771 boost::asio::transfer_exactly(42), error);
1772 BOOST_ASIO_CHECK(bytes_transferred == 42);
1773 BOOST_ASIO_CHECK(sb.size() == 42);
1774 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
1775 BOOST_ASIO_CHECK(!error);
1777 s.reset(read_data, sizeof(read_data));
1778 sb.consume(sb.size());
1779 bytes_transferred = boost::asio::read(s, sb,
1780 old_style_transfer_all, error);
1781 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1782 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1783 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1784 BOOST_ASIO_CHECK(!error);
1786 s.reset(read_data, sizeof(read_data));
1787 s.next_read_length(1);
1788 sb.consume(sb.size());
1789 error = boost::system::error_code();
1790 bytes_transferred = boost::asio::read(s, sb,
1791 old_style_transfer_all, error);
1792 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1793 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1794 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1795 BOOST_ASIO_CHECK(!error);
1797 s.reset(read_data, sizeof(read_data));
1798 s.next_read_length(10);
1799 sb.consume(sb.size());
1800 error = boost::system::error_code();
1801 bytes_transferred = boost::asio::read(s, sb,
1802 old_style_transfer_all, error);
1803 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1804 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1805 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1806 BOOST_ASIO_CHECK(!error);
1808 s.reset(read_data, sizeof(read_data));
1809 sb.consume(sb.size());
1810 bytes_transferred = boost::asio::read(s, sb, short_transfer, error);
1811 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1812 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1813 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1814 BOOST_ASIO_CHECK(!error);
1816 s.reset(read_data, sizeof(read_data));
1817 s.next_read_length(1);
1818 sb.consume(sb.size());
1819 error = boost::system::error_code();
1820 bytes_transferred = boost::asio::read(s, sb, short_transfer, error);
1821 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1822 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1823 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1824 BOOST_ASIO_CHECK(!error);
1826 s.reset(read_data, sizeof(read_data));
1827 s.next_read_length(10);
1828 sb.consume(sb.size());
1829 error = boost::system::error_code();
1830 bytes_transferred = boost::asio::read(s, sb, short_transfer, error);
1831 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1832 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1833 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
1834 BOOST_ASIO_CHECK(!error);
1837 void async_read_handler(const boost::system::error_code& e,
1838 size_t bytes_transferred, size_t expected_bytes_transferred, bool* called)
1841 BOOST_ASIO_CHECK(!e);
1842 BOOST_ASIO_CHECK(bytes_transferred == expected_bytes_transferred);
1845 void test_3_arg_mutable_buffers_1_async_read()
1847 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
1848 namespace bindns = boost;
1849 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1850 namespace bindns = std;
1851 using std::placeholders::_1;
1852 using std::placeholders::_2;
1853 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1855 boost::asio::io_service ios;
1857 char read_buf[sizeof(read_data)];
1858 boost::asio::mutable_buffers_1 buffers
1859 = boost::asio::buffer(read_buf, sizeof(read_buf));
1861 s.reset(read_data, sizeof(read_data));
1862 memset(read_buf, 0, sizeof(read_buf));
1863 bool called = false;
1864 boost::asio::async_read(s, buffers,
1865 bindns::bind(async_read_handler,
1866 _1, _2, sizeof(read_data), &called));
1869 BOOST_ASIO_CHECK(called);
1870 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1872 s.reset(read_data, sizeof(read_data));
1873 s.next_read_length(1);
1874 memset(read_buf, 0, sizeof(read_buf));
1876 boost::asio::async_read(s, buffers,
1877 bindns::bind(async_read_handler,
1878 _1, _2, sizeof(read_data), &called));
1881 BOOST_ASIO_CHECK(called);
1882 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1884 s.reset(read_data, sizeof(read_data));
1885 s.next_read_length(10);
1886 memset(read_buf, 0, sizeof(read_buf));
1888 boost::asio::async_read(s, buffers,
1889 bindns::bind(async_read_handler,
1890 _1, _2, sizeof(read_data), &called));
1893 BOOST_ASIO_CHECK(called);
1894 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1896 s.reset(read_data, sizeof(read_data));
1897 memset(read_buf, 0, sizeof(read_buf));
1898 int i = boost::asio::async_read(s, buffers, archetypes::lazy_handler());
1899 BOOST_ASIO_CHECK(i == 42);
1902 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1905 void test_3_arg_boost_array_buffers_async_read()
1907 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
1908 namespace bindns = boost;
1909 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1910 namespace bindns = std;
1911 using std::placeholders::_1;
1912 using std::placeholders::_2;
1913 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1915 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
1916 boost::asio::io_service ios;
1918 char read_buf[sizeof(read_data)];
1919 boost::array<boost::asio::mutable_buffer, 2> buffers = { {
1920 boost::asio::buffer(read_buf, 32),
1921 boost::asio::buffer(read_buf) + 32 } };
1923 s.reset(read_data, sizeof(read_data));
1924 memset(read_buf, 0, sizeof(read_buf));
1925 bool called = false;
1926 boost::asio::async_read(s, buffers,
1927 bindns::bind(async_read_handler,
1928 _1, _2, sizeof(read_data), &called));
1931 BOOST_ASIO_CHECK(called);
1932 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1934 s.reset(read_data, sizeof(read_data));
1935 s.next_read_length(1);
1936 memset(read_buf, 0, sizeof(read_buf));
1938 boost::asio::async_read(s, buffers,
1939 bindns::bind(async_read_handler,
1940 _1, _2, sizeof(read_data), &called));
1943 BOOST_ASIO_CHECK(called);
1944 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1946 s.reset(read_data, sizeof(read_data));
1947 s.next_read_length(10);
1948 memset(read_buf, 0, sizeof(read_buf));
1950 boost::asio::async_read(s, buffers,
1951 bindns::bind(async_read_handler,
1952 _1, _2, sizeof(read_data), &called));
1955 BOOST_ASIO_CHECK(called);
1956 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1958 s.reset(read_data, sizeof(read_data));
1959 memset(read_buf, 0, sizeof(read_buf));
1960 int i = boost::asio::async_read(s, buffers, archetypes::lazy_handler());
1961 BOOST_ASIO_CHECK(i == 42);
1964 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1965 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
1968 void test_3_arg_std_array_buffers_async_read()
1970 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
1971 namespace bindns = boost;
1972 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
1973 namespace bindns = std;
1974 using std::placeholders::_1;
1975 using std::placeholders::_2;
1976 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
1978 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
1979 boost::asio::io_service ios;
1981 char read_buf[sizeof(read_data)];
1982 std::array<boost::asio::mutable_buffer, 2> buffers = { {
1983 boost::asio::buffer(read_buf, 32),
1984 boost::asio::buffer(read_buf) + 32 } };
1986 s.reset(read_data, sizeof(read_data));
1987 memset(read_buf, 0, sizeof(read_buf));
1988 bool called = false;
1989 boost::asio::async_read(s, buffers,
1990 bindns::bind(async_read_handler,
1991 _1, _2, sizeof(read_data), &called));
1994 BOOST_ASIO_CHECK(called);
1995 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
1997 s.reset(read_data, sizeof(read_data));
1998 s.next_read_length(1);
1999 memset(read_buf, 0, sizeof(read_buf));
2001 boost::asio::async_read(s, buffers,
2002 bindns::bind(async_read_handler,
2003 _1, _2, sizeof(read_data), &called));
2006 BOOST_ASIO_CHECK(called);
2007 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2009 s.reset(read_data, sizeof(read_data));
2010 s.next_read_length(10);
2011 memset(read_buf, 0, sizeof(read_buf));
2013 boost::asio::async_read(s, buffers,
2014 bindns::bind(async_read_handler,
2015 _1, _2, sizeof(read_data), &called));
2018 BOOST_ASIO_CHECK(called);
2019 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2021 s.reset(read_data, sizeof(read_data));
2022 memset(read_buf, 0, sizeof(read_buf));
2023 int i = boost::asio::async_read(s, buffers, archetypes::lazy_handler());
2024 BOOST_ASIO_CHECK(i == 42);
2027 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2028 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
2031 void test_3_arg_vector_buffers_async_read()
2033 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2034 namespace bindns = boost;
2035 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2036 namespace bindns = std;
2037 using std::placeholders::_1;
2038 using std::placeholders::_2;
2039 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2041 boost::asio::io_service ios;
2043 char read_buf[sizeof(read_data)];
2044 std::vector<boost::asio::mutable_buffer> buffers;
2045 buffers.push_back(boost::asio::buffer(read_buf, 32));
2046 buffers.push_back(boost::asio::buffer(read_buf) + 32);
2048 s.reset(read_data, sizeof(read_data));
2049 memset(read_buf, 0, sizeof(read_buf));
2050 bool called = false;
2051 boost::asio::async_read(s, buffers,
2052 bindns::bind(async_read_handler,
2053 _1, _2, sizeof(read_data), &called));
2056 BOOST_ASIO_CHECK(called);
2057 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2059 s.reset(read_data, sizeof(read_data));
2060 s.next_read_length(1);
2061 memset(read_buf, 0, sizeof(read_buf));
2063 boost::asio::async_read(s, buffers,
2064 bindns::bind(async_read_handler,
2065 _1, _2, sizeof(read_data), &called));
2068 BOOST_ASIO_CHECK(called);
2069 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2071 s.reset(read_data, sizeof(read_data));
2072 s.next_read_length(10);
2073 memset(read_buf, 0, sizeof(read_buf));
2075 boost::asio::async_read(s, buffers,
2076 bindns::bind(async_read_handler,
2077 _1, _2, sizeof(read_data), &called));
2080 BOOST_ASIO_CHECK(called);
2081 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2083 s.reset(read_data, sizeof(read_data));
2084 memset(read_buf, 0, sizeof(read_buf));
2085 int i = boost::asio::async_read(s, buffers, archetypes::lazy_handler());
2086 BOOST_ASIO_CHECK(i == 42);
2089 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2092 void test_3_arg_streambuf_async_read()
2094 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2095 namespace bindns = boost;
2096 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2097 namespace bindns = std;
2098 using std::placeholders::_1;
2099 using std::placeholders::_2;
2100 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2102 boost::asio::io_service ios;
2104 boost::asio::streambuf sb(sizeof(read_data));
2106 s.reset(read_data, sizeof(read_data));
2107 sb.consume(sb.size());
2108 bool called = false;
2109 boost::asio::async_read(s, sb,
2110 bindns::bind(async_read_handler,
2111 _1, _2, sizeof(read_data), &called));
2114 BOOST_ASIO_CHECK(called);
2115 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2116 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2118 s.reset(read_data, sizeof(read_data));
2119 s.next_read_length(1);
2120 sb.consume(sb.size());
2122 boost::asio::async_read(s, sb,
2123 bindns::bind(async_read_handler,
2124 _1, _2, sizeof(read_data), &called));
2127 BOOST_ASIO_CHECK(called);
2128 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2129 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2131 s.reset(read_data, sizeof(read_data));
2132 s.next_read_length(10);
2133 sb.consume(sb.size());
2135 boost::asio::async_read(s, sb,
2136 bindns::bind(async_read_handler,
2137 _1, _2, sizeof(read_data), &called));
2140 BOOST_ASIO_CHECK(called);
2141 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2142 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2144 s.reset(read_data, sizeof(read_data));
2145 sb.consume(sb.size());
2146 int i = boost::asio::async_read(s, sb, archetypes::lazy_handler());
2147 BOOST_ASIO_CHECK(i == 42);
2150 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2151 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
2154 void test_4_arg_mutable_buffers_1_async_read()
2156 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2157 namespace bindns = boost;
2158 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2159 namespace bindns = std;
2160 using std::placeholders::_1;
2161 using std::placeholders::_2;
2162 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2164 boost::asio::io_service ios;
2166 char read_buf[sizeof(read_data)];
2167 boost::asio::mutable_buffers_1 buffers
2168 = boost::asio::buffer(read_buf, sizeof(read_buf));
2170 s.reset(read_data, sizeof(read_data));
2171 memset(read_buf, 0, sizeof(read_buf));
2172 bool called = false;
2173 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
2174 bindns::bind(async_read_handler,
2175 _1, _2, sizeof(read_data), &called));
2178 BOOST_ASIO_CHECK(called);
2179 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2181 s.reset(read_data, sizeof(read_data));
2182 s.next_read_length(1);
2183 memset(read_buf, 0, sizeof(read_buf));
2185 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
2186 bindns::bind(async_read_handler,
2187 _1, _2, sizeof(read_data), &called));
2190 BOOST_ASIO_CHECK(called);
2191 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2193 s.reset(read_data, sizeof(read_data));
2194 s.next_read_length(10);
2195 memset(read_buf, 0, sizeof(read_buf));
2197 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
2198 bindns::bind(async_read_handler,
2199 _1, _2, sizeof(read_data), &called));
2202 BOOST_ASIO_CHECK(called);
2203 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2205 s.reset(read_data, sizeof(read_data));
2206 memset(read_buf, 0, sizeof(read_buf));
2208 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2209 bindns::bind(async_read_handler,
2210 _1, _2, sizeof(read_data), &called));
2213 BOOST_ASIO_CHECK(called);
2214 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2216 s.reset(read_data, sizeof(read_data));
2217 s.next_read_length(1);
2218 memset(read_buf, 0, sizeof(read_buf));
2220 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2221 bindns::bind(async_read_handler,
2222 _1, _2, 1, &called));
2225 BOOST_ASIO_CHECK(called);
2226 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2228 s.reset(read_data, sizeof(read_data));
2229 s.next_read_length(10);
2230 memset(read_buf, 0, sizeof(read_buf));
2232 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2233 bindns::bind(async_read_handler,
2234 _1, _2, 10, &called));
2237 BOOST_ASIO_CHECK(called);
2238 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2240 s.reset(read_data, sizeof(read_data));
2241 memset(read_buf, 0, sizeof(read_buf));
2243 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
2244 bindns::bind(async_read_handler,
2245 _1, _2, sizeof(read_data), &called));
2248 BOOST_ASIO_CHECK(called);
2249 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2251 s.reset(read_data, sizeof(read_data));
2252 s.next_read_length(1);
2253 memset(read_buf, 0, sizeof(read_buf));
2255 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
2256 bindns::bind(async_read_handler,
2257 _1, _2, 10, &called));
2260 BOOST_ASIO_CHECK(called);
2261 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2263 s.reset(read_data, sizeof(read_data));
2264 s.next_read_length(10);
2265 memset(read_buf, 0, sizeof(read_buf));
2267 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
2268 bindns::bind(async_read_handler,
2269 _1, _2, 10, &called));
2272 BOOST_ASIO_CHECK(called);
2273 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2275 s.reset(read_data, sizeof(read_data));
2276 memset(read_buf, 0, sizeof(read_buf));
2278 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
2279 bindns::bind(async_read_handler,
2280 _1, _2, sizeof(read_data), &called));
2283 BOOST_ASIO_CHECK(called);
2284 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2286 s.reset(read_data, sizeof(read_data));
2287 s.next_read_length(1);
2288 memset(read_buf, 0, sizeof(read_buf));
2290 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
2291 bindns::bind(async_read_handler,
2292 _1, _2, 42, &called));
2295 BOOST_ASIO_CHECK(called);
2296 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2298 s.reset(read_data, sizeof(read_data));
2299 s.next_read_length(10);
2300 memset(read_buf, 0, sizeof(read_buf));
2302 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
2303 bindns::bind(async_read_handler,
2304 _1, _2, 50, &called));
2307 BOOST_ASIO_CHECK(called);
2308 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
2310 s.reset(read_data, sizeof(read_data));
2311 memset(read_buf, 0, sizeof(read_buf));
2313 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
2314 bindns::bind(async_read_handler,
2315 _1, _2, 1, &called));
2318 BOOST_ASIO_CHECK(called);
2319 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2321 s.reset(read_data, sizeof(read_data));
2322 s.next_read_length(1);
2323 memset(read_buf, 0, sizeof(read_buf));
2325 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
2326 bindns::bind(async_read_handler,
2327 _1, _2, 1, &called));
2330 BOOST_ASIO_CHECK(called);
2331 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2333 s.reset(read_data, sizeof(read_data));
2334 s.next_read_length(10);
2335 memset(read_buf, 0, sizeof(read_buf));
2337 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
2338 bindns::bind(async_read_handler,
2339 _1, _2, 1, &called));
2342 BOOST_ASIO_CHECK(called);
2343 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2345 s.reset(read_data, sizeof(read_data));
2346 memset(read_buf, 0, sizeof(read_buf));
2348 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
2349 bindns::bind(async_read_handler,
2350 _1, _2, 10, &called));
2353 BOOST_ASIO_CHECK(called);
2354 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2356 s.reset(read_data, sizeof(read_data));
2357 s.next_read_length(1);
2358 memset(read_buf, 0, sizeof(read_buf));
2360 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
2361 bindns::bind(async_read_handler,
2362 _1, _2, 10, &called));
2365 BOOST_ASIO_CHECK(called);
2366 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2368 s.reset(read_data, sizeof(read_data));
2369 s.next_read_length(10);
2370 memset(read_buf, 0, sizeof(read_buf));
2372 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
2373 bindns::bind(async_read_handler,
2374 _1, _2, 10, &called));
2377 BOOST_ASIO_CHECK(called);
2378 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2380 s.reset(read_data, sizeof(read_data));
2381 memset(read_buf, 0, sizeof(read_buf));
2383 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
2384 bindns::bind(async_read_handler,
2385 _1, _2, 42, &called));
2388 BOOST_ASIO_CHECK(called);
2389 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2391 s.reset(read_data, sizeof(read_data));
2392 s.next_read_length(1);
2393 memset(read_buf, 0, sizeof(read_buf));
2395 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
2396 bindns::bind(async_read_handler,
2397 _1, _2, 42, &called));
2400 BOOST_ASIO_CHECK(called);
2401 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2403 s.reset(read_data, sizeof(read_data));
2404 s.next_read_length(10);
2405 memset(read_buf, 0, sizeof(read_buf));
2407 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
2408 bindns::bind(async_read_handler,
2409 _1, _2, 42, &called));
2412 BOOST_ASIO_CHECK(called);
2413 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2415 s.reset(read_data, sizeof(read_data));
2416 memset(read_buf, 0, sizeof(read_buf));
2418 boost::asio::async_read(s, buffers, old_style_transfer_all,
2419 bindns::bind(async_read_handler,
2420 _1, _2, sizeof(read_data), &called));
2423 BOOST_ASIO_CHECK(called);
2424 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2426 s.reset(read_data, sizeof(read_data));
2427 s.next_read_length(1);
2428 memset(read_buf, 0, sizeof(read_buf));
2430 boost::asio::async_read(s, buffers, old_style_transfer_all,
2431 bindns::bind(async_read_handler,
2432 _1, _2, sizeof(read_data), &called));
2435 BOOST_ASIO_CHECK(called);
2436 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2438 s.reset(read_data, sizeof(read_data));
2439 s.next_read_length(10);
2440 memset(read_buf, 0, sizeof(read_buf));
2442 boost::asio::async_read(s, buffers, old_style_transfer_all,
2443 bindns::bind(async_read_handler,
2444 _1, _2, sizeof(read_data), &called));
2447 BOOST_ASIO_CHECK(called);
2448 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2450 s.reset(read_data, sizeof(read_data));
2451 memset(read_buf, 0, sizeof(read_buf));
2453 boost::asio::async_read(s, buffers, short_transfer,
2454 bindns::bind(async_read_handler,
2455 _1, _2, sizeof(read_data), &called));
2458 BOOST_ASIO_CHECK(called);
2459 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2461 s.reset(read_data, sizeof(read_data));
2462 s.next_read_length(1);
2463 memset(read_buf, 0, sizeof(read_buf));
2465 boost::asio::async_read(s, buffers, short_transfer,
2466 bindns::bind(async_read_handler,
2467 _1, _2, sizeof(read_data), &called));
2470 BOOST_ASIO_CHECK(called);
2471 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2473 s.reset(read_data, sizeof(read_data));
2474 s.next_read_length(10);
2475 memset(read_buf, 0, sizeof(read_buf));
2477 boost::asio::async_read(s, buffers, short_transfer,
2478 bindns::bind(async_read_handler,
2479 _1, _2, sizeof(read_data), &called));
2482 BOOST_ASIO_CHECK(called);
2483 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2485 s.reset(read_data, sizeof(read_data));
2486 memset(read_buf, 0, sizeof(read_buf));
2487 int i = boost::asio::async_read(s, buffers,
2488 short_transfer, archetypes::lazy_handler());
2489 BOOST_ASIO_CHECK(i == 42);
2492 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2495 void test_4_arg_boost_array_buffers_async_read()
2497 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2498 namespace bindns = boost;
2499 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2500 namespace bindns = std;
2501 using std::placeholders::_1;
2502 using std::placeholders::_2;
2503 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2505 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
2506 boost::asio::io_service ios;
2508 char read_buf[sizeof(read_data)];
2509 boost::array<boost::asio::mutable_buffer, 2> buffers = { {
2510 boost::asio::buffer(read_buf, 32),
2511 boost::asio::buffer(read_buf) + 32 } };
2513 s.reset(read_data, sizeof(read_data));
2514 memset(read_buf, 0, sizeof(read_buf));
2515 bool called = false;
2516 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
2517 bindns::bind(async_read_handler,
2518 _1, _2, sizeof(read_data), &called));
2521 BOOST_ASIO_CHECK(called);
2522 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2524 s.reset(read_data, sizeof(read_data));
2525 s.next_read_length(1);
2526 memset(read_buf, 0, sizeof(read_buf));
2528 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
2529 bindns::bind(async_read_handler,
2530 _1, _2, sizeof(read_data), &called));
2533 BOOST_ASIO_CHECK(called);
2534 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2536 s.reset(read_data, sizeof(read_data));
2537 s.next_read_length(10);
2538 memset(read_buf, 0, sizeof(read_buf));
2540 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
2541 bindns::bind(async_read_handler,
2542 _1, _2, sizeof(read_data), &called));
2545 BOOST_ASIO_CHECK(called);
2546 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2548 s.reset(read_data, sizeof(read_data));
2549 memset(read_buf, 0, sizeof(read_buf));
2551 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2552 bindns::bind(async_read_handler,
2553 _1, _2, sizeof(read_data), &called));
2556 BOOST_ASIO_CHECK(called);
2557 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2559 s.reset(read_data, sizeof(read_data));
2560 s.next_read_length(1);
2561 memset(read_buf, 0, sizeof(read_buf));
2563 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2564 bindns::bind(async_read_handler,
2565 _1, _2, 1, &called));
2568 BOOST_ASIO_CHECK(called);
2569 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2571 s.reset(read_data, sizeof(read_data));
2572 s.next_read_length(10);
2573 memset(read_buf, 0, sizeof(read_buf));
2575 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2576 bindns::bind(async_read_handler,
2577 _1, _2, 10, &called));
2580 BOOST_ASIO_CHECK(called);
2581 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2583 s.reset(read_data, sizeof(read_data));
2584 memset(read_buf, 0, sizeof(read_buf));
2586 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
2587 bindns::bind(async_read_handler,
2588 _1, _2, sizeof(read_data), &called));
2591 BOOST_ASIO_CHECK(called);
2592 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2594 s.reset(read_data, sizeof(read_data));
2595 s.next_read_length(1);
2596 memset(read_buf, 0, sizeof(read_buf));
2598 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
2599 bindns::bind(async_read_handler,
2600 _1, _2, 10, &called));
2603 BOOST_ASIO_CHECK(called);
2604 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2606 s.reset(read_data, sizeof(read_data));
2607 s.next_read_length(10);
2608 memset(read_buf, 0, sizeof(read_buf));
2610 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
2611 bindns::bind(async_read_handler,
2612 _1, _2, 10, &called));
2615 BOOST_ASIO_CHECK(called);
2616 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2618 s.reset(read_data, sizeof(read_data));
2619 memset(read_buf, 0, sizeof(read_buf));
2621 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
2622 bindns::bind(async_read_handler,
2623 _1, _2, sizeof(read_data), &called));
2626 BOOST_ASIO_CHECK(called);
2627 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2629 s.reset(read_data, sizeof(read_data));
2630 s.next_read_length(1);
2631 memset(read_buf, 0, sizeof(read_buf));
2633 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
2634 bindns::bind(async_read_handler,
2635 _1, _2, 42, &called));
2638 BOOST_ASIO_CHECK(called);
2639 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2641 s.reset(read_data, sizeof(read_data));
2642 s.next_read_length(10);
2643 memset(read_buf, 0, sizeof(read_buf));
2645 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
2646 bindns::bind(async_read_handler,
2647 _1, _2, 50, &called));
2650 BOOST_ASIO_CHECK(called);
2651 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
2653 s.reset(read_data, sizeof(read_data));
2654 memset(read_buf, 0, sizeof(read_buf));
2656 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
2657 bindns::bind(async_read_handler,
2658 _1, _2, 1, &called));
2661 BOOST_ASIO_CHECK(called);
2662 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2664 s.reset(read_data, sizeof(read_data));
2665 s.next_read_length(1);
2666 memset(read_buf, 0, sizeof(read_buf));
2668 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
2669 bindns::bind(async_read_handler,
2670 _1, _2, 1, &called));
2673 BOOST_ASIO_CHECK(called);
2674 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2676 s.reset(read_data, sizeof(read_data));
2677 s.next_read_length(10);
2678 memset(read_buf, 0, sizeof(read_buf));
2680 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
2681 bindns::bind(async_read_handler,
2682 _1, _2, 1, &called));
2685 BOOST_ASIO_CHECK(called);
2686 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2688 s.reset(read_data, sizeof(read_data));
2689 memset(read_buf, 0, sizeof(read_buf));
2691 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
2692 bindns::bind(async_read_handler,
2693 _1, _2, 10, &called));
2696 BOOST_ASIO_CHECK(called);
2697 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2699 s.reset(read_data, sizeof(read_data));
2700 s.next_read_length(1);
2701 memset(read_buf, 0, sizeof(read_buf));
2703 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
2704 bindns::bind(async_read_handler,
2705 _1, _2, 10, &called));
2708 BOOST_ASIO_CHECK(called);
2709 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2711 s.reset(read_data, sizeof(read_data));
2712 s.next_read_length(10);
2713 memset(read_buf, 0, sizeof(read_buf));
2715 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
2716 bindns::bind(async_read_handler,
2717 _1, _2, 10, &called));
2720 BOOST_ASIO_CHECK(called);
2721 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2723 s.reset(read_data, sizeof(read_data));
2724 memset(read_buf, 0, sizeof(read_buf));
2726 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
2727 bindns::bind(async_read_handler,
2728 _1, _2, 42, &called));
2731 BOOST_ASIO_CHECK(called);
2732 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2734 s.reset(read_data, sizeof(read_data));
2735 s.next_read_length(1);
2736 memset(read_buf, 0, sizeof(read_buf));
2738 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
2739 bindns::bind(async_read_handler,
2740 _1, _2, 42, &called));
2743 BOOST_ASIO_CHECK(called);
2744 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2746 s.reset(read_data, sizeof(read_data));
2747 s.next_read_length(10);
2748 memset(read_buf, 0, sizeof(read_buf));
2750 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
2751 bindns::bind(async_read_handler,
2752 _1, _2, 42, &called));
2755 BOOST_ASIO_CHECK(called);
2756 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2758 s.reset(read_data, sizeof(read_data));
2759 memset(read_buf, 0, sizeof(read_buf));
2761 boost::asio::async_read(s, buffers, old_style_transfer_all,
2762 bindns::bind(async_read_handler,
2763 _1, _2, sizeof(read_data), &called));
2766 BOOST_ASIO_CHECK(called);
2767 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2769 s.reset(read_data, sizeof(read_data));
2770 s.next_read_length(1);
2771 memset(read_buf, 0, sizeof(read_buf));
2773 boost::asio::async_read(s, buffers, old_style_transfer_all,
2774 bindns::bind(async_read_handler,
2775 _1, _2, sizeof(read_data), &called));
2778 BOOST_ASIO_CHECK(called);
2779 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2781 s.reset(read_data, sizeof(read_data));
2782 s.next_read_length(10);
2783 memset(read_buf, 0, sizeof(read_buf));
2785 boost::asio::async_read(s, buffers, old_style_transfer_all,
2786 bindns::bind(async_read_handler,
2787 _1, _2, sizeof(read_data), &called));
2790 BOOST_ASIO_CHECK(called);
2791 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2793 s.reset(read_data, sizeof(read_data));
2794 memset(read_buf, 0, sizeof(read_buf));
2796 boost::asio::async_read(s, buffers, short_transfer,
2797 bindns::bind(async_read_handler,
2798 _1, _2, sizeof(read_data), &called));
2801 BOOST_ASIO_CHECK(called);
2802 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2804 s.reset(read_data, sizeof(read_data));
2805 s.next_read_length(1);
2806 memset(read_buf, 0, sizeof(read_buf));
2808 boost::asio::async_read(s, buffers, short_transfer,
2809 bindns::bind(async_read_handler,
2810 _1, _2, sizeof(read_data), &called));
2813 BOOST_ASIO_CHECK(called);
2814 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2816 s.reset(read_data, sizeof(read_data));
2817 s.next_read_length(10);
2818 memset(read_buf, 0, sizeof(read_buf));
2820 boost::asio::async_read(s, buffers, short_transfer,
2821 bindns::bind(async_read_handler,
2822 _1, _2, sizeof(read_data), &called));
2825 BOOST_ASIO_CHECK(called);
2826 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2828 s.reset(read_data, sizeof(read_data));
2829 memset(read_buf, 0, sizeof(read_buf));
2830 int i = boost::asio::async_read(s, buffers,
2831 short_transfer, archetypes::lazy_handler());
2832 BOOST_ASIO_CHECK(i == 42);
2835 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2836 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
2839 void test_4_arg_std_array_buffers_async_read()
2841 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
2842 namespace bindns = boost;
2843 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
2844 namespace bindns = std;
2845 using std::placeholders::_1;
2846 using std::placeholders::_2;
2847 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
2849 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
2850 boost::asio::io_service ios;
2852 char read_buf[sizeof(read_data)];
2853 std::array<boost::asio::mutable_buffer, 2> buffers = { {
2854 boost::asio::buffer(read_buf, 32),
2855 boost::asio::buffer(read_buf) + 32 } };
2857 s.reset(read_data, sizeof(read_data));
2858 memset(read_buf, 0, sizeof(read_buf));
2859 bool called = false;
2860 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
2861 bindns::bind(async_read_handler,
2862 _1, _2, sizeof(read_data), &called));
2865 BOOST_ASIO_CHECK(called);
2866 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2868 s.reset(read_data, sizeof(read_data));
2869 s.next_read_length(1);
2870 memset(read_buf, 0, sizeof(read_buf));
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
2895 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
2896 bindns::bind(async_read_handler,
2897 _1, _2, sizeof(read_data), &called));
2900 BOOST_ASIO_CHECK(called);
2901 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2903 s.reset(read_data, sizeof(read_data));
2904 s.next_read_length(1);
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, 1, &called));
2912 BOOST_ASIO_CHECK(called);
2913 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
2915 s.reset(read_data, sizeof(read_data));
2916 s.next_read_length(10);
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, 10, &called));
2924 BOOST_ASIO_CHECK(called);
2925 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2927 s.reset(read_data, sizeof(read_data));
2928 memset(read_buf, 0, sizeof(read_buf));
2930 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
2931 bindns::bind(async_read_handler,
2932 _1, _2, sizeof(read_data), &called));
2935 BOOST_ASIO_CHECK(called);
2936 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2938 s.reset(read_data, sizeof(read_data));
2939 s.next_read_length(1);
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, 10, &called));
2947 BOOST_ASIO_CHECK(called);
2948 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
2950 s.reset(read_data, sizeof(read_data));
2951 s.next_read_length(10);
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 memset(read_buf, 0, sizeof(read_buf));
2965 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
2966 bindns::bind(async_read_handler,
2967 _1, _2, sizeof(read_data), &called));
2970 BOOST_ASIO_CHECK(called);
2971 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
2973 s.reset(read_data, sizeof(read_data));
2974 s.next_read_length(1);
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, 42, &called));
2982 BOOST_ASIO_CHECK(called);
2983 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
2985 s.reset(read_data, sizeof(read_data));
2986 s.next_read_length(10);
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, 50, &called));
2994 BOOST_ASIO_CHECK(called);
2995 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
2997 s.reset(read_data, sizeof(read_data));
2998 memset(read_buf, 0, sizeof(read_buf));
3000 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3001 bindns::bind(async_read_handler,
3002 _1, _2, 1, &called));
3005 BOOST_ASIO_CHECK(called);
3006 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3008 s.reset(read_data, sizeof(read_data));
3009 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3035 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3036 bindns::bind(async_read_handler,
3037 _1, _2, 10, &called));
3040 BOOST_ASIO_CHECK(called);
3041 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3043 s.reset(read_data, sizeof(read_data));
3044 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3070 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3071 bindns::bind(async_read_handler,
3072 _1, _2, 42, &called));
3075 BOOST_ASIO_CHECK(called);
3076 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3078 s.reset(read_data, sizeof(read_data));
3079 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3105 boost::asio::async_read(s, buffers, old_style_transfer_all,
3106 bindns::bind(async_read_handler,
3107 _1, _2, sizeof(read_data), &called));
3110 BOOST_ASIO_CHECK(called);
3111 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3113 s.reset(read_data, sizeof(read_data));
3114 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3140 boost::asio::async_read(s, buffers, short_transfer,
3141 bindns::bind(async_read_handler,
3142 _1, _2, sizeof(read_data), &called));
3145 BOOST_ASIO_CHECK(called);
3146 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3148 s.reset(read_data, sizeof(read_data));
3149 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3174 int i = boost::asio::async_read(s, buffers,
3175 short_transfer, archetypes::lazy_handler());
3176 BOOST_ASIO_CHECK(i == 42);
3179 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3180 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
3183 void test_4_arg_vector_buffers_async_read()
3185 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3186 namespace bindns = boost;
3187 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3188 namespace bindns = std;
3189 using std::placeholders::_1;
3190 using std::placeholders::_2;
3191 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3193 boost::asio::io_service ios;
3195 char read_buf[sizeof(read_data)];
3196 std::vector<boost::asio::mutable_buffer> buffers;
3197 buffers.push_back(boost::asio::buffer(read_buf, 32));
3198 buffers.push_back(boost::asio::buffer(read_buf) + 32);
3200 s.reset(read_data, sizeof(read_data));
3201 memset(read_buf, 0, sizeof(read_buf));
3202 bool called = false;
3203 boost::asio::async_read(s, buffers, boost::asio::transfer_all(),
3204 bindns::bind(async_read_handler,
3205 _1, _2, sizeof(read_data), &called));
3208 BOOST_ASIO_CHECK(called);
3209 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3211 s.reset(read_data, sizeof(read_data));
3212 s.next_read_length(1);
3213 memset(read_buf, 0, sizeof(read_buf));
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3238 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(1),
3239 bindns::bind(async_read_handler,
3240 _1, _2, sizeof(read_data), &called));
3243 BOOST_ASIO_CHECK(called);
3244 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3246 s.reset(read_data, sizeof(read_data));
3247 s.next_read_length(1);
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, 1, &called));
3255 BOOST_ASIO_CHECK(called);
3256 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3258 s.reset(read_data, sizeof(read_data));
3259 s.next_read_length(10);
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, 10, &called));
3267 BOOST_ASIO_CHECK(called);
3268 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3270 s.reset(read_data, sizeof(read_data));
3271 memset(read_buf, 0, sizeof(read_buf));
3273 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(10),
3274 bindns::bind(async_read_handler,
3275 _1, _2, sizeof(read_data), &called));
3278 BOOST_ASIO_CHECK(called);
3279 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3281 s.reset(read_data, sizeof(read_data));
3282 s.next_read_length(1);
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, 10, &called));
3290 BOOST_ASIO_CHECK(called);
3291 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3293 s.reset(read_data, sizeof(read_data));
3294 s.next_read_length(10);
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 memset(read_buf, 0, sizeof(read_buf));
3308 boost::asio::async_read(s, buffers, boost::asio::transfer_at_least(42),
3309 bindns::bind(async_read_handler,
3310 _1, _2, sizeof(read_data), &called));
3313 BOOST_ASIO_CHECK(called);
3314 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3316 s.reset(read_data, sizeof(read_data));
3317 s.next_read_length(1);
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, 42, &called));
3325 BOOST_ASIO_CHECK(called);
3326 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3328 s.reset(read_data, sizeof(read_data));
3329 s.next_read_length(10);
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, 50, &called));
3337 BOOST_ASIO_CHECK(called);
3338 BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
3340 s.reset(read_data, sizeof(read_data));
3341 memset(read_buf, 0, sizeof(read_buf));
3343 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(1),
3344 bindns::bind(async_read_handler,
3345 _1, _2, 1, &called));
3348 BOOST_ASIO_CHECK(called);
3349 BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
3351 s.reset(read_data, sizeof(read_data));
3352 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3378 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(10),
3379 bindns::bind(async_read_handler,
3380 _1, _2, 10, &called));
3383 BOOST_ASIO_CHECK(called);
3384 BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
3386 s.reset(read_data, sizeof(read_data));
3387 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3413 boost::asio::async_read(s, buffers, boost::asio::transfer_exactly(42),
3414 bindns::bind(async_read_handler,
3415 _1, _2, 42, &called));
3418 BOOST_ASIO_CHECK(called);
3419 BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
3421 s.reset(read_data, sizeof(read_data));
3422 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3448 boost::asio::async_read(s, buffers, old_style_transfer_all,
3449 bindns::bind(async_read_handler,
3450 _1, _2, sizeof(read_data), &called));
3453 BOOST_ASIO_CHECK(called);
3454 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3456 s.reset(read_data, sizeof(read_data));
3457 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3483 boost::asio::async_read(s, buffers, short_transfer,
3484 bindns::bind(async_read_handler,
3485 _1, _2, sizeof(read_data), &called));
3488 BOOST_ASIO_CHECK(called);
3489 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3491 s.reset(read_data, sizeof(read_data));
3492 s.next_read_length(1);
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(10);
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 memset(read_buf, 0, sizeof(read_buf));
3517 int i = boost::asio::async_read(s, buffers,
3518 short_transfer, archetypes::lazy_handler());
3519 BOOST_ASIO_CHECK(i == 42);
3522 BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(read_data)));
3525 void test_4_arg_streambuf_async_read()
3527 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3528 namespace bindns = boost;
3529 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3530 namespace bindns = std;
3531 using std::placeholders::_1;
3532 using std::placeholders::_2;
3533 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3535 boost::asio::io_service ios;
3537 boost::asio::streambuf sb(sizeof(read_data));
3539 s.reset(read_data, sizeof(read_data));
3540 sb.consume(sb.size());
3541 bool called = false;
3542 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
3543 bindns::bind(async_read_handler,
3544 _1, _2, sizeof(read_data), &called));
3547 BOOST_ASIO_CHECK(called);
3548 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3549 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3551 s.reset(read_data, sizeof(read_data));
3552 s.next_read_length(1);
3553 sb.consume(sb.size());
3555 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
3556 bindns::bind(async_read_handler,
3557 _1, _2, sizeof(read_data), &called));
3560 BOOST_ASIO_CHECK(called);
3561 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3562 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3564 s.reset(read_data, sizeof(read_data));
3565 s.next_read_length(10);
3566 sb.consume(sb.size());
3568 boost::asio::async_read(s, sb, boost::asio::transfer_all(),
3569 bindns::bind(async_read_handler,
3570 _1, _2, sizeof(read_data), &called));
3573 BOOST_ASIO_CHECK(called);
3574 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3575 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3577 s.reset(read_data, sizeof(read_data));
3578 sb.consume(sb.size());
3580 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
3581 bindns::bind(async_read_handler,
3582 _1, _2, sizeof(read_data), &called));
3585 BOOST_ASIO_CHECK(called);
3586 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3587 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3589 s.reset(read_data, sizeof(read_data));
3590 s.next_read_length(1);
3591 sb.consume(sb.size());
3593 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
3594 bindns::bind(async_read_handler,
3595 _1, _2, 1, &called));
3598 BOOST_ASIO_CHECK(called);
3599 BOOST_ASIO_CHECK(sb.size() == 1);
3600 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
3602 s.reset(read_data, sizeof(read_data));
3603 s.next_read_length(10);
3604 sb.consume(sb.size());
3606 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(1),
3607 bindns::bind(async_read_handler,
3608 _1, _2, 10, &called));
3611 BOOST_ASIO_CHECK(called);
3612 BOOST_ASIO_CHECK(sb.size() == 10);
3613 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
3615 s.reset(read_data, sizeof(read_data));
3616 sb.consume(sb.size());
3618 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
3619 bindns::bind(async_read_handler,
3620 _1, _2, sizeof(read_data), &called));
3623 BOOST_ASIO_CHECK(called);
3624 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3625 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3627 s.reset(read_data, sizeof(read_data));
3628 s.next_read_length(1);
3629 sb.consume(sb.size());
3631 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
3632 bindns::bind(async_read_handler,
3633 _1, _2, 10, &called));
3636 BOOST_ASIO_CHECK(called);
3637 BOOST_ASIO_CHECK(sb.size() == 10);
3638 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
3640 s.reset(read_data, sizeof(read_data));
3641 s.next_read_length(10);
3642 sb.consume(sb.size());
3644 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(10),
3645 bindns::bind(async_read_handler,
3646 _1, _2, 10, &called));
3649 BOOST_ASIO_CHECK(called);
3650 BOOST_ASIO_CHECK(sb.size() == 10);
3651 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
3653 s.reset(read_data, sizeof(read_data));
3654 sb.consume(sb.size());
3656 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
3657 bindns::bind(async_read_handler,
3658 _1, _2, sizeof(read_data), &called));
3661 BOOST_ASIO_CHECK(called);
3662 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3663 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3665 s.reset(read_data, sizeof(read_data));
3666 s.next_read_length(1);
3667 sb.consume(sb.size());
3669 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
3670 bindns::bind(async_read_handler,
3671 _1, _2, 42, &called));
3674 BOOST_ASIO_CHECK(called);
3675 BOOST_ASIO_CHECK(sb.size() == 42);
3676 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
3678 s.reset(read_data, sizeof(read_data));
3679 s.next_read_length(10);
3680 sb.consume(sb.size());
3682 boost::asio::async_read(s, sb, boost::asio::transfer_at_least(42),
3683 bindns::bind(async_read_handler,
3684 _1, _2, 50, &called));
3687 BOOST_ASIO_CHECK(called);
3688 BOOST_ASIO_CHECK(sb.size() == 50);
3689 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 50));
3691 s.reset(read_data, sizeof(read_data));
3692 sb.consume(sb.size());
3694 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
3695 bindns::bind(async_read_handler,
3696 _1, _2, 1, &called));
3699 BOOST_ASIO_CHECK(called);
3700 BOOST_ASIO_CHECK(sb.size() == 1);
3701 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
3703 s.reset(read_data, sizeof(read_data));
3704 s.next_read_length(1);
3705 sb.consume(sb.size());
3707 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
3708 bindns::bind(async_read_handler,
3709 _1, _2, 1, &called));
3712 BOOST_ASIO_CHECK(called);
3713 BOOST_ASIO_CHECK(sb.size() == 1);
3714 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
3716 s.reset(read_data, sizeof(read_data));
3717 s.next_read_length(10);
3718 sb.consume(sb.size());
3720 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(1),
3721 bindns::bind(async_read_handler,
3722 _1, _2, 1, &called));
3725 BOOST_ASIO_CHECK(called);
3726 BOOST_ASIO_CHECK(sb.size() == 1);
3727 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 1));
3729 s.reset(read_data, sizeof(read_data));
3730 sb.consume(sb.size());
3732 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(10),
3733 bindns::bind(async_read_handler,
3734 _1, _2, 10, &called));
3737 BOOST_ASIO_CHECK(called);
3738 BOOST_ASIO_CHECK(sb.size() == 10);
3739 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
3741 s.reset(read_data, sizeof(read_data));
3742 s.next_read_length(1);
3743 sb.consume(sb.size());
3745 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(10),
3746 bindns::bind(async_read_handler,
3747 _1, _2, 10, &called));
3750 BOOST_ASIO_CHECK(called);
3751 BOOST_ASIO_CHECK(sb.size() == 10);
3752 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
3754 s.reset(read_data, sizeof(read_data));
3755 s.next_read_length(10);
3756 sb.consume(sb.size());
3758 boost::asio::async_read(s, sb, 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(sb.size() == 10);
3765 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 10));
3767 s.reset(read_data, sizeof(read_data));
3768 sb.consume(sb.size());
3770 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
3771 bindns::bind(async_read_handler,
3772 _1, _2, 42, &called));
3775 BOOST_ASIO_CHECK(called);
3776 BOOST_ASIO_CHECK(sb.size() == 42);
3777 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
3779 s.reset(read_data, sizeof(read_data));
3780 s.next_read_length(1);
3781 sb.consume(sb.size());
3783 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
3784 bindns::bind(async_read_handler,
3785 _1, _2, 42, &called));
3788 BOOST_ASIO_CHECK(called);
3789 BOOST_ASIO_CHECK(sb.size() == 42);
3790 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
3792 s.reset(read_data, sizeof(read_data));
3793 s.next_read_length(10);
3794 sb.consume(sb.size());
3796 boost::asio::async_read(s, sb, boost::asio::transfer_exactly(42),
3797 bindns::bind(async_read_handler,
3798 _1, _2, 42, &called));
3801 BOOST_ASIO_CHECK(called);
3802 BOOST_ASIO_CHECK(sb.size() == 42);
3803 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), 42));
3805 s.reset(read_data, sizeof(read_data));
3806 sb.consume(sb.size());
3808 boost::asio::async_read(s, sb, old_style_transfer_all,
3809 bindns::bind(async_read_handler,
3810 _1, _2, sizeof(read_data), &called));
3813 BOOST_ASIO_CHECK(called);
3814 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3815 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3817 s.reset(read_data, sizeof(read_data));
3818 s.next_read_length(1);
3819 sb.consume(sb.size());
3821 boost::asio::async_read(s, sb, old_style_transfer_all,
3822 bindns::bind(async_read_handler,
3823 _1, _2, sizeof(read_data), &called));
3826 BOOST_ASIO_CHECK(called);
3827 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3828 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3830 s.reset(read_data, sizeof(read_data));
3831 s.next_read_length(10);
3832 sb.consume(sb.size());
3834 boost::asio::async_read(s, sb, old_style_transfer_all,
3835 bindns::bind(async_read_handler,
3836 _1, _2, sizeof(read_data), &called));
3839 BOOST_ASIO_CHECK(called);
3840 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3841 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3843 s.reset(read_data, sizeof(read_data));
3844 sb.consume(sb.size());
3846 boost::asio::async_read(s, sb, short_transfer,
3847 bindns::bind(async_read_handler,
3848 _1, _2, sizeof(read_data), &called));
3851 BOOST_ASIO_CHECK(called);
3852 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3853 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3855 s.reset(read_data, sizeof(read_data));
3856 s.next_read_length(1);
3857 sb.consume(sb.size());
3859 boost::asio::async_read(s, sb, short_transfer,
3860 bindns::bind(async_read_handler,
3861 _1, _2, sizeof(read_data), &called));
3864 BOOST_ASIO_CHECK(called);
3865 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3866 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3868 s.reset(read_data, sizeof(read_data));
3869 s.next_read_length(10);
3870 sb.consume(sb.size());
3872 boost::asio::async_read(s, sb, short_transfer,
3873 bindns::bind(async_read_handler,
3874 _1, _2, sizeof(read_data), &called));
3877 BOOST_ASIO_CHECK(called);
3878 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3879 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3881 s.reset(read_data, sizeof(read_data));
3882 sb.consume(sb.size());
3883 int i = boost::asio::async_read(s, sb,
3884 short_transfer, archetypes::lazy_handler());
3885 BOOST_ASIO_CHECK(i == 42);
3888 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3889 BOOST_ASIO_CHECK(s.check_buffers(sb.data(), sizeof(read_data)));
3892 BOOST_ASIO_TEST_SUITE
3895 BOOST_ASIO_TEST_CASE(test_2_arg_zero_buffers_read)
3896 BOOST_ASIO_TEST_CASE(test_2_arg_mutable_buffers_1_read)
3897 BOOST_ASIO_TEST_CASE(test_2_arg_vector_buffers_read)
3898 BOOST_ASIO_TEST_CASE(test_2_arg_streambuf_read)
3899 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_zero_buffers_read)
3900 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_mutable_buffers_1_read)
3901 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_vector_buffers_read)
3902 BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_streambuf_read)
3903 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffers_1_read)
3904 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_read)
3905 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_read)
3906 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffers_1_read)
3907 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_read)
3908 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_read)
3909 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffers_1_async_read)
3910 BOOST_ASIO_TEST_CASE(test_3_arg_boost_array_buffers_async_read)
3911 BOOST_ASIO_TEST_CASE(test_3_arg_std_array_buffers_async_read)
3912 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_async_read)
3913 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_async_read)
3914 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffers_1_async_read)
3915 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_async_read)
3916 BOOST_ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_read)
3917 BOOST_ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_read)
3918 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_async_read)