1 //
2 // read_at.cpp
3 // ~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6 //
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 //
10
11 // Disable autolinking for unit tests.
12 #if !defined(BOOST_ALL_NO_LIB)
13 #define BOOST_ALL_NO_LIB 1
14 #endif // !defined(BOOST_ALL_NO_LIB)
15
16 // Test that header file is self-contained.
17 #include <boost/asio/read_at.hpp>
18
19 #include <cstring>
20 #include "archetypes/async_result.hpp"
21 #include <boost/asio/io_service.hpp>
22 #include <boost/asio/streambuf.hpp>
23 #include "unit_test.hpp"
24
25 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
26 # include <boost/bind.hpp>
27 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
28 # include <functional>
29 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
30
31 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
32 #include <boost/array.hpp>
33 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
34
35 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
36 # include <array>
37 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
38
39 using namespace std; // For memcmp, memcpy and memset.
40
41 class test_random_access_device
42 {
43 public:
44 typedef boost::asio::io_service io_service_type;
45
test_random_access_device(boost::asio::io_service & io_service)46 test_random_access_device(boost::asio::io_service& io_service)
47 : io_service_(io_service),
48 length_(0),
49 next_read_length_(0)
50 {
51 }
52
get_io_service()53 io_service_type& get_io_service()
54 {
55 return io_service_;
56 }
57
reset(const void * data,size_t length)58 void reset(const void* data, size_t length)
59 {
60 BOOST_ASIO_CHECK(length <= max_length);
61
62 length_ = 0;
63 while (length_ + length < max_length)
64 {
65 memcpy(data_ + length_, data, length);
66 length_ += length;
67 }
68
69 next_read_length_ = length;
70 }
71
next_read_length(size_t length)72 void next_read_length(size_t length)
73 {
74 next_read_length_ = length;
75 }
76
77 template <typename Const_Buffers>
check_buffers(boost::asio::uint64_t offset,const Const_Buffers & buffers,size_t length)78 bool check_buffers(boost::asio::uint64_t offset,
79 const Const_Buffers& buffers, size_t length)
80 {
81 if (offset + length > max_length)
82 return false;
83
84 typename Const_Buffers::const_iterator iter = buffers.begin();
85 typename Const_Buffers::const_iterator end = buffers.end();
86 size_t checked_length = 0;
87 for (; iter != end && checked_length < length; ++iter)
88 {
89 size_t buffer_length = boost::asio::buffer_size(*iter);
90 if (buffer_length > length - checked_length)
91 buffer_length = length - checked_length;
92 if (memcmp(data_ + offset + checked_length,
93 boost::asio::buffer_cast<const void*>(*iter), buffer_length) != 0)
94 return false;
95 checked_length += buffer_length;
96 }
97
98 return true;
99 }
100
101 template <typename Mutable_Buffers>
read_some_at(boost::asio::uint64_t offset,const Mutable_Buffers & buffers)102 size_t read_some_at(boost::asio::uint64_t offset,
103 const Mutable_Buffers& buffers)
104 {
105 return boost::asio::buffer_copy(buffers,
106 boost::asio::buffer(data_, length_) + offset,
107 next_read_length_);
108 }
109
110 template <typename Mutable_Buffers>
read_some_at(boost::asio::uint64_t offset,const Mutable_Buffers & buffers,boost::system::error_code & ec)111 size_t read_some_at(boost::asio::uint64_t offset,
112 const Mutable_Buffers& buffers, boost::system::error_code& ec)
113 {
114 ec = boost::system::error_code();
115 return read_some_at(offset, buffers);
116 }
117
118 template <typename Mutable_Buffers, typename Handler>
async_read_some_at(boost::asio::uint64_t offset,const Mutable_Buffers & buffers,Handler handler)119 void async_read_some_at(boost::asio::uint64_t offset,
120 const Mutable_Buffers& buffers, Handler handler)
121 {
122 size_t bytes_transferred = read_some_at(offset, buffers);
123 io_service_.post(boost::asio::detail::bind_handler(
124 handler, boost::system::error_code(), bytes_transferred));
125 }
126
127 private:
128 io_service_type& io_service_;
129 enum { max_length = 8192 };
130 char data_[max_length];
131 size_t length_;
132 size_t next_read_length_;
133 };
134
135 static const char read_data[]
136 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
137
test_3_arg_mutable_buffers_1_read_at()138 void test_3_arg_mutable_buffers_1_read_at()
139 {
140 boost::asio::io_service ios;
141 test_random_access_device s(ios);
142 char read_buf[sizeof(read_data)];
143 boost::asio::mutable_buffers_1 buffers
144 = boost::asio::buffer(read_buf, sizeof(read_buf));
145
146 s.reset(read_data, sizeof(read_data));
147 memset(read_buf, 0, sizeof(read_buf));
148 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers);
149 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
150 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
151
152 s.reset(read_data, sizeof(read_data));
153 memset(read_buf, 0, sizeof(read_buf));
154 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
155 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
156 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
157
158 s.reset(read_data, sizeof(read_data));
159 s.next_read_length(1);
160 memset(read_buf, 0, sizeof(read_buf));
161 bytes_transferred = boost::asio::read_at(s, 0, buffers);
162 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
163 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
164
165 s.reset(read_data, sizeof(read_data));
166 s.next_read_length(1);
167 memset(read_buf, 0, sizeof(read_buf));
168 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
169 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
170 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
171
172 s.reset(read_data, sizeof(read_data));
173 s.next_read_length(10);
174 memset(read_buf, 0, sizeof(read_buf));
175 bytes_transferred = boost::asio::read_at(s, 0, buffers);
176 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
177 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
178
179 s.reset(read_data, sizeof(read_data));
180 s.next_read_length(10);
181 memset(read_buf, 0, sizeof(read_buf));
182 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
183 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
184 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
185 }
186
test_3_arg_vector_buffers_read_at()187 void test_3_arg_vector_buffers_read_at()
188 {
189 boost::asio::io_service ios;
190 test_random_access_device s(ios);
191 char read_buf[sizeof(read_data)];
192 std::vector<boost::asio::mutable_buffer> buffers;
193 buffers.push_back(boost::asio::buffer(read_buf, 32));
194 buffers.push_back(boost::asio::buffer(read_buf) + 32);
195
196 s.reset(read_data, sizeof(read_data));
197 memset(read_buf, 0, sizeof(read_buf));
198 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers);
199 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
200 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
201
202 s.reset(read_data, sizeof(read_data));
203 memset(read_buf, 0, sizeof(read_buf));
204 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
205 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
206 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
207
208 s.reset(read_data, sizeof(read_data));
209 s.next_read_length(1);
210 memset(read_buf, 0, sizeof(read_buf));
211 bytes_transferred = boost::asio::read_at(s, 0, buffers);
212 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
213 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
214
215 s.reset(read_data, sizeof(read_data));
216 s.next_read_length(1);
217 memset(read_buf, 0, sizeof(read_buf));
218 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
219 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
220 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
221
222 s.reset(read_data, sizeof(read_data));
223 s.next_read_length(10);
224 memset(read_buf, 0, sizeof(read_buf));
225 bytes_transferred = boost::asio::read_at(s, 0, buffers);
226 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
227 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
228
229 s.reset(read_data, sizeof(read_data));
230 s.next_read_length(10);
231 memset(read_buf, 0, sizeof(read_buf));
232 bytes_transferred = boost::asio::read_at(s, 1234, buffers);
233 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
234 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
235 }
236
test_3_arg_streambuf_read_at()237 void test_3_arg_streambuf_read_at()
238 {
239 boost::asio::io_service ios;
240 test_random_access_device s(ios);
241 boost::asio::streambuf sb(sizeof(read_data));
242
243 s.reset(read_data, sizeof(read_data));
244 sb.consume(sb.size());
245 size_t bytes_transferred = boost::asio::read_at(s, 0, sb);
246 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
247 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
248 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
249
250 s.reset(read_data, sizeof(read_data));
251 sb.consume(sb.size());
252 bytes_transferred = boost::asio::read_at(s, 1234, sb);
253 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
254 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
255 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
256
257 s.reset(read_data, sizeof(read_data));
258 s.next_read_length(1);
259 sb.consume(sb.size());
260 bytes_transferred = boost::asio::read_at(s, 0, sb);
261 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
262 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
263 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
264
265 s.reset(read_data, sizeof(read_data));
266 s.next_read_length(1);
267 sb.consume(sb.size());
268 bytes_transferred = boost::asio::read_at(s, 1234, sb);
269 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
270 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
271 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
272
273 s.reset(read_data, sizeof(read_data));
274 s.next_read_length(10);
275 sb.consume(sb.size());
276 bytes_transferred = boost::asio::read_at(s, 0, sb);
277 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
278 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
279 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
280
281 s.reset(read_data, sizeof(read_data));
282 s.next_read_length(10);
283 sb.consume(sb.size());
284 bytes_transferred = boost::asio::read_at(s, 1234, sb);
285 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
286 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
287 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
288 }
289
test_4_arg_nothrow_mutable_buffers_1_read_at()290 void test_4_arg_nothrow_mutable_buffers_1_read_at()
291 {
292 boost::asio::io_service ios;
293 test_random_access_device s(ios);
294 char read_buf[sizeof(read_data)];
295 boost::asio::mutable_buffers_1 buffers
296 = boost::asio::buffer(read_buf, sizeof(read_buf));
297
298 s.reset(read_data, sizeof(read_data));
299 memset(read_buf, 0, sizeof(read_buf));
300 boost::system::error_code error;
301 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
302 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
303 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
304 BOOST_ASIO_CHECK(!error);
305
306 s.reset(read_data, sizeof(read_data));
307 memset(read_buf, 0, sizeof(read_buf));
308 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
309 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
310 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
311 BOOST_ASIO_CHECK(!error);
312
313 s.reset(read_data, sizeof(read_data));
314 s.next_read_length(1);
315 memset(read_buf, 0, sizeof(read_buf));
316 bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
317 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
318 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
319 BOOST_ASIO_CHECK(!error);
320
321 s.reset(read_data, sizeof(read_data));
322 s.next_read_length(1);
323 memset(read_buf, 0, sizeof(read_buf));
324 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
325 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
326 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
327 BOOST_ASIO_CHECK(!error);
328
329 s.reset(read_data, sizeof(read_data));
330 s.next_read_length(10);
331 memset(read_buf, 0, sizeof(read_buf));
332 bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
333 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
334 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
335 BOOST_ASIO_CHECK(!error);
336
337 s.reset(read_data, sizeof(read_data));
338 s.next_read_length(10);
339 memset(read_buf, 0, sizeof(read_buf));
340 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
341 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
342 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
343 BOOST_ASIO_CHECK(!error);
344 }
345
test_4_arg_nothrow_vector_buffers_read_at()346 void test_4_arg_nothrow_vector_buffers_read_at()
347 {
348 boost::asio::io_service ios;
349 test_random_access_device s(ios);
350 char read_buf[sizeof(read_data)];
351 std::vector<boost::asio::mutable_buffer> buffers;
352 buffers.push_back(boost::asio::buffer(read_buf, 32));
353 buffers.push_back(boost::asio::buffer(read_buf) + 32);
354
355 s.reset(read_data, sizeof(read_data));
356 memset(read_buf, 0, sizeof(read_buf));
357 boost::system::error_code error;
358 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
359 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
360 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
361 BOOST_ASIO_CHECK(!error);
362
363 s.reset(read_data, sizeof(read_data));
364 memset(read_buf, 0, sizeof(read_buf));
365 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
366 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
367 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
368 BOOST_ASIO_CHECK(!error);
369
370 s.reset(read_data, sizeof(read_data));
371 s.next_read_length(1);
372 memset(read_buf, 0, sizeof(read_buf));
373 bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
374 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
375 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
376 BOOST_ASIO_CHECK(!error);
377
378 s.reset(read_data, sizeof(read_data));
379 s.next_read_length(1);
380 memset(read_buf, 0, sizeof(read_buf));
381 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
382 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
383 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
384 BOOST_ASIO_CHECK(!error);
385
386 s.reset(read_data, sizeof(read_data));
387 s.next_read_length(10);
388 memset(read_buf, 0, sizeof(read_buf));
389 bytes_transferred = boost::asio::read_at(s, 0, buffers, error);
390 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
391 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
392 BOOST_ASIO_CHECK(!error);
393
394 s.reset(read_data, sizeof(read_data));
395 s.next_read_length(10);
396 memset(read_buf, 0, sizeof(read_buf));
397 bytes_transferred = boost::asio::read_at(s, 1234, buffers, error);
398 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
399 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
400 BOOST_ASIO_CHECK(!error);
401 }
402
test_4_arg_nothrow_streambuf_read_at()403 void test_4_arg_nothrow_streambuf_read_at()
404 {
405 boost::asio::io_service ios;
406 test_random_access_device s(ios);
407 boost::asio::streambuf sb(sizeof(read_data));
408
409 s.reset(read_data, sizeof(read_data));
410 sb.consume(sb.size());
411 boost::system::error_code error;
412 size_t bytes_transferred = boost::asio::read_at(s, 0, sb, error);
413 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
414 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
415 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
416 BOOST_ASIO_CHECK(!error);
417
418 s.reset(read_data, sizeof(read_data));
419 sb.consume(sb.size());
420 bytes_transferred = boost::asio::read_at(s, 1234, sb, error);
421 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
422 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
423 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
424 BOOST_ASIO_CHECK(!error);
425
426 s.reset(read_data, sizeof(read_data));
427 s.next_read_length(1);
428 sb.consume(sb.size());
429 bytes_transferred = boost::asio::read_at(s, 0, sb, error);
430 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
431 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
432 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
433 BOOST_ASIO_CHECK(!error);
434
435 s.reset(read_data, sizeof(read_data));
436 s.next_read_length(1);
437 sb.consume(sb.size());
438 bytes_transferred = boost::asio::read_at(s, 1234, sb, error);
439 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
440 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
441 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
442 BOOST_ASIO_CHECK(!error);
443
444 s.reset(read_data, sizeof(read_data));
445 s.next_read_length(10);
446 sb.consume(sb.size());
447 bytes_transferred = boost::asio::read_at(s, 0, sb, error);
448 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
449 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
450 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
451 BOOST_ASIO_CHECK(!error);
452
453 s.reset(read_data, sizeof(read_data));
454 s.next_read_length(10);
455 sb.consume(sb.size());
456 bytes_transferred = boost::asio::read_at(s, 1234, sb, error);
457 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
458 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
459 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
460 BOOST_ASIO_CHECK(!error);
461 }
462
old_style_transfer_all(const boost::system::error_code & ec,size_t)463 bool old_style_transfer_all(const boost::system::error_code& ec,
464 size_t /*bytes_transferred*/)
465 {
466 return !!ec;
467 }
468
short_transfer(const boost::system::error_code & ec,size_t)469 size_t short_transfer(const boost::system::error_code& ec,
470 size_t /*bytes_transferred*/)
471 {
472 return !!ec ? 0 : 3;
473 }
474
test_4_arg_mutable_buffers_1_read_at()475 void test_4_arg_mutable_buffers_1_read_at()
476 {
477 boost::asio::io_service ios;
478 test_random_access_device s(ios);
479 char read_buf[sizeof(read_data)];
480 boost::asio::mutable_buffers_1 buffers
481 = boost::asio::buffer(read_buf, sizeof(read_buf));
482
483 s.reset(read_data, sizeof(read_data));
484 memset(read_buf, 0, sizeof(read_buf));
485 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers,
486 boost::asio::transfer_all());
487 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
488 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
489
490 s.reset(read_data, sizeof(read_data));
491 memset(read_buf, 0, sizeof(read_buf));
492 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
493 boost::asio::transfer_all());
494 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
495 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
496
497 s.reset(read_data, sizeof(read_data));
498 s.next_read_length(1);
499 memset(read_buf, 0, sizeof(read_buf));
500 bytes_transferred = boost::asio::read_at(s, 0, buffers,
501 boost::asio::transfer_all());
502 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
503 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
504
505 s.reset(read_data, sizeof(read_data));
506 s.next_read_length(1);
507 memset(read_buf, 0, sizeof(read_buf));
508 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
509 boost::asio::transfer_all());
510 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
511 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
512
513 s.reset(read_data, sizeof(read_data));
514 s.next_read_length(10);
515 memset(read_buf, 0, sizeof(read_buf));
516 bytes_transferred = boost::asio::read_at(s, 0, buffers,
517 boost::asio::transfer_all());
518 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
519 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
520
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_at(s, 1234, buffers,
525 boost::asio::transfer_all());
526 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
527 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
528
529 s.reset(read_data, sizeof(read_data));
530 memset(read_buf, 0, sizeof(read_buf));
531 bytes_transferred = boost::asio::read_at(s, 0, buffers,
532 boost::asio::transfer_at_least(1));
533 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
534 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
535
536 s.reset(read_data, sizeof(read_data));
537 memset(read_buf, 0, sizeof(read_buf));
538 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
539 boost::asio::transfer_at_least(1));
540 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
541 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
542
543 s.reset(read_data, sizeof(read_data));
544 s.next_read_length(1);
545 memset(read_buf, 0, sizeof(read_buf));
546 bytes_transferred = boost::asio::read_at(s, 0, buffers,
547 boost::asio::transfer_at_least(1));
548 BOOST_ASIO_CHECK(bytes_transferred == 1);
549 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
550
551 s.reset(read_data, sizeof(read_data));
552 s.next_read_length(1);
553 memset(read_buf, 0, sizeof(read_buf));
554 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
555 boost::asio::transfer_at_least(1));
556 BOOST_ASIO_CHECK(bytes_transferred == 1);
557 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
558
559 s.reset(read_data, sizeof(read_data));
560 s.next_read_length(10);
561 memset(read_buf, 0, sizeof(read_buf));
562 bytes_transferred = boost::asio::read_at(s, 0, buffers,
563 boost::asio::transfer_at_least(1));
564 BOOST_ASIO_CHECK(bytes_transferred == 10);
565 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
566
567 s.reset(read_data, sizeof(read_data));
568 s.next_read_length(10);
569 memset(read_buf, 0, sizeof(read_buf));
570 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
571 boost::asio::transfer_at_least(1));
572 BOOST_ASIO_CHECK(bytes_transferred == 10);
573 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
574
575 s.reset(read_data, sizeof(read_data));
576 memset(read_buf, 0, sizeof(read_buf));
577 bytes_transferred = boost::asio::read_at(s, 0, buffers,
578 boost::asio::transfer_at_least(10));
579 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
580 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
581
582 s.reset(read_data, sizeof(read_data));
583 memset(read_buf, 0, sizeof(read_buf));
584 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
585 boost::asio::transfer_at_least(10));
586 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
587 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
588
589 s.reset(read_data, sizeof(read_data));
590 s.next_read_length(1);
591 memset(read_buf, 0, sizeof(read_buf));
592 bytes_transferred = boost::asio::read_at(s, 0, buffers,
593 boost::asio::transfer_at_least(10));
594 BOOST_ASIO_CHECK(bytes_transferred == 10);
595 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
596
597 s.reset(read_data, sizeof(read_data));
598 s.next_read_length(1);
599 memset(read_buf, 0, sizeof(read_buf));
600 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
601 boost::asio::transfer_at_least(10));
602 BOOST_ASIO_CHECK(bytes_transferred == 10);
603 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
604
605 s.reset(read_data, sizeof(read_data));
606 s.next_read_length(10);
607 memset(read_buf, 0, sizeof(read_buf));
608 bytes_transferred = boost::asio::read_at(s, 0, buffers,
609 boost::asio::transfer_at_least(10));
610 BOOST_ASIO_CHECK(bytes_transferred == 10);
611 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
612
613 s.reset(read_data, sizeof(read_data));
614 s.next_read_length(10);
615 memset(read_buf, 0, sizeof(read_buf));
616 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
617 boost::asio::transfer_at_least(10));
618 BOOST_ASIO_CHECK(bytes_transferred == 10);
619 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
620
621 s.reset(read_data, sizeof(read_data));
622 memset(read_buf, 0, sizeof(read_buf));
623 bytes_transferred = boost::asio::read_at(s, 0, buffers,
624 boost::asio::transfer_at_least(42));
625 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
626 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
627
628 s.reset(read_data, sizeof(read_data));
629 memset(read_buf, 0, sizeof(read_buf));
630 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
631 boost::asio::transfer_at_least(42));
632 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
633 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
634
635 s.reset(read_data, sizeof(read_data));
636 s.next_read_length(1);
637 memset(read_buf, 0, sizeof(read_buf));
638 bytes_transferred = boost::asio::read_at(s, 0, buffers,
639 boost::asio::transfer_at_least(42));
640 BOOST_ASIO_CHECK(bytes_transferred == 42);
641 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
642
643 s.reset(read_data, sizeof(read_data));
644 s.next_read_length(1);
645 memset(read_buf, 0, sizeof(read_buf));
646 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
647 boost::asio::transfer_at_least(42));
648 BOOST_ASIO_CHECK(bytes_transferred == 42);
649 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
650
651 s.reset(read_data, sizeof(read_data));
652 s.next_read_length(10);
653 memset(read_buf, 0, sizeof(read_buf));
654 bytes_transferred = boost::asio::read_at(s, 0, buffers,
655 boost::asio::transfer_at_least(42));
656 BOOST_ASIO_CHECK(bytes_transferred == 50);
657 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
658
659 s.reset(read_data, sizeof(read_data));
660 s.next_read_length(10);
661 memset(read_buf, 0, sizeof(read_buf));
662 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
663 boost::asio::transfer_at_least(42));
664 BOOST_ASIO_CHECK(bytes_transferred == 50);
665 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
666
667 s.reset(read_data, sizeof(read_data));
668 memset(read_buf, 0, sizeof(read_buf));
669 bytes_transferred = boost::asio::read_at(s, 0, buffers,
670 boost::asio::transfer_exactly(1));
671 BOOST_ASIO_CHECK(bytes_transferred == 1);
672 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
673
674 s.reset(read_data, sizeof(read_data));
675 memset(read_buf, 0, sizeof(read_buf));
676 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
677 boost::asio::transfer_exactly(1));
678 BOOST_ASIO_CHECK(bytes_transferred == 1);
679 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
680
681 s.reset(read_data, sizeof(read_data));
682 s.next_read_length(1);
683 memset(read_buf, 0, sizeof(read_buf));
684 bytes_transferred = boost::asio::read_at(s, 0, buffers,
685 boost::asio::transfer_exactly(1));
686 BOOST_ASIO_CHECK(bytes_transferred == 1);
687 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
688
689 s.reset(read_data, sizeof(read_data));
690 s.next_read_length(1);
691 memset(read_buf, 0, sizeof(read_buf));
692 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
693 boost::asio::transfer_exactly(1));
694 BOOST_ASIO_CHECK(bytes_transferred == 1);
695 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
696
697 s.reset(read_data, sizeof(read_data));
698 s.next_read_length(10);
699 memset(read_buf, 0, sizeof(read_buf));
700 bytes_transferred = boost::asio::read_at(s, 0, buffers,
701 boost::asio::transfer_exactly(1));
702 BOOST_ASIO_CHECK(bytes_transferred == 1);
703 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
704
705 s.reset(read_data, sizeof(read_data));
706 s.next_read_length(10);
707 memset(read_buf, 0, sizeof(read_buf));
708 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
709 boost::asio::transfer_exactly(1));
710 BOOST_ASIO_CHECK(bytes_transferred == 1);
711 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
712
713 s.reset(read_data, sizeof(read_data));
714 memset(read_buf, 0, sizeof(read_buf));
715 bytes_transferred = boost::asio::read_at(s, 0, buffers,
716 boost::asio::transfer_exactly(10));
717 BOOST_ASIO_CHECK(bytes_transferred == 10);
718 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
719
720 s.reset(read_data, sizeof(read_data));
721 memset(read_buf, 0, sizeof(read_buf));
722 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
723 boost::asio::transfer_exactly(10));
724 BOOST_ASIO_CHECK(bytes_transferred == 10);
725 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
726
727 s.reset(read_data, sizeof(read_data));
728 s.next_read_length(1);
729 memset(read_buf, 0, sizeof(read_buf));
730 bytes_transferred = boost::asio::read_at(s, 0, buffers,
731 boost::asio::transfer_exactly(10));
732 BOOST_ASIO_CHECK(bytes_transferred == 10);
733 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
734
735 s.reset(read_data, sizeof(read_data));
736 s.next_read_length(1);
737 memset(read_buf, 0, sizeof(read_buf));
738 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
739 boost::asio::transfer_exactly(10));
740 BOOST_ASIO_CHECK(bytes_transferred == 10);
741 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
742
743 s.reset(read_data, sizeof(read_data));
744 s.next_read_length(10);
745 memset(read_buf, 0, sizeof(read_buf));
746 bytes_transferred = boost::asio::read_at(s, 0, buffers,
747 boost::asio::transfer_exactly(10));
748 BOOST_ASIO_CHECK(bytes_transferred == 10);
749 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
750
751 s.reset(read_data, sizeof(read_data));
752 s.next_read_length(10);
753 memset(read_buf, 0, sizeof(read_buf));
754 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
755 boost::asio::transfer_exactly(10));
756 BOOST_ASIO_CHECK(bytes_transferred == 10);
757 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
758
759 s.reset(read_data, sizeof(read_data));
760 memset(read_buf, 0, sizeof(read_buf));
761 bytes_transferred = boost::asio::read_at(s, 0, buffers,
762 boost::asio::transfer_exactly(42));
763 BOOST_ASIO_CHECK(bytes_transferred == 42);
764 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
765
766 s.reset(read_data, sizeof(read_data));
767 memset(read_buf, 0, sizeof(read_buf));
768 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
769 boost::asio::transfer_exactly(42));
770 BOOST_ASIO_CHECK(bytes_transferred == 42);
771 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
772
773 s.reset(read_data, sizeof(read_data));
774 s.next_read_length(1);
775 memset(read_buf, 0, sizeof(read_buf));
776 bytes_transferred = boost::asio::read_at(s, 0, buffers,
777 boost::asio::transfer_exactly(42));
778 BOOST_ASIO_CHECK(bytes_transferred == 42);
779 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
780
781 s.reset(read_data, sizeof(read_data));
782 s.next_read_length(1);
783 memset(read_buf, 0, sizeof(read_buf));
784 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
785 boost::asio::transfer_exactly(42));
786 BOOST_ASIO_CHECK(bytes_transferred == 42);
787 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
788
789 s.reset(read_data, sizeof(read_data));
790 s.next_read_length(10);
791 memset(read_buf, 0, sizeof(read_buf));
792 bytes_transferred = boost::asio::read_at(s, 0, buffers,
793 boost::asio::transfer_exactly(42));
794 BOOST_ASIO_CHECK(bytes_transferred == 42);
795 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
796
797 s.reset(read_data, sizeof(read_data));
798 s.next_read_length(10);
799 memset(read_buf, 0, sizeof(read_buf));
800 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
801 boost::asio::transfer_exactly(42));
802 BOOST_ASIO_CHECK(bytes_transferred == 42);
803 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
804
805 s.reset(read_data, sizeof(read_data));
806 memset(read_buf, 0, sizeof(read_buf));
807 bytes_transferred = boost::asio::read_at(s, 0, buffers,
808 old_style_transfer_all);
809 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
810 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
811
812 s.reset(read_data, sizeof(read_data));
813 memset(read_buf, 0, sizeof(read_buf));
814 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
815 old_style_transfer_all);
816 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
817 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
818
819 s.reset(read_data, sizeof(read_data));
820 s.next_read_length(1);
821 memset(read_buf, 0, sizeof(read_buf));
822 bytes_transferred = boost::asio::read_at(s, 0, buffers,
823 old_style_transfer_all);
824 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
825 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
826
827 s.reset(read_data, sizeof(read_data));
828 s.next_read_length(1);
829 memset(read_buf, 0, sizeof(read_buf));
830 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
831 old_style_transfer_all);
832 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
833 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
834
835 s.reset(read_data, sizeof(read_data));
836 s.next_read_length(10);
837 memset(read_buf, 0, sizeof(read_buf));
838 bytes_transferred = boost::asio::read_at(s, 0, buffers,
839 old_style_transfer_all);
840 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
841 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
842
843 s.reset(read_data, sizeof(read_data));
844 s.next_read_length(10);
845 memset(read_buf, 0, sizeof(read_buf));
846 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
847 old_style_transfer_all);
848 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
849 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
850
851 s.reset(read_data, sizeof(read_data));
852 memset(read_buf, 0, sizeof(read_buf));
853 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer);
854 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
855 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
856
857 s.reset(read_data, sizeof(read_data));
858 memset(read_buf, 0, sizeof(read_buf));
859 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer);
860 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
861 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
862
863 s.reset(read_data, sizeof(read_data));
864 s.next_read_length(1);
865 memset(read_buf, 0, sizeof(read_buf));
866 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer);
867 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
868 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
869
870 s.reset(read_data, sizeof(read_data));
871 s.next_read_length(1);
872 memset(read_buf, 0, sizeof(read_buf));
873 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer);
874 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
875 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
876
877 s.reset(read_data, sizeof(read_data));
878 s.next_read_length(10);
879 memset(read_buf, 0, sizeof(read_buf));
880 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer);
881 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
882 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
883
884 s.reset(read_data, sizeof(read_data));
885 s.next_read_length(10);
886 memset(read_buf, 0, sizeof(read_buf));
887 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer);
888 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
889 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
890 }
891
test_4_arg_vector_buffers_read_at()892 void test_4_arg_vector_buffers_read_at()
893 {
894 boost::asio::io_service ios;
895 test_random_access_device s(ios);
896 char read_buf[sizeof(read_data)];
897 std::vector<boost::asio::mutable_buffer> buffers;
898 buffers.push_back(boost::asio::buffer(read_buf, 32));
899 buffers.push_back(boost::asio::buffer(read_buf) + 32);
900
901 s.reset(read_data, sizeof(read_data));
902 memset(read_buf, 0, sizeof(read_buf));
903 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers,
904 boost::asio::transfer_all());
905 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
906 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
907
908 s.reset(read_data, sizeof(read_data));
909 memset(read_buf, 0, sizeof(read_buf));
910 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
911 boost::asio::transfer_all());
912 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
913 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
914
915 s.reset(read_data, sizeof(read_data));
916 s.next_read_length(1);
917 memset(read_buf, 0, sizeof(read_buf));
918 bytes_transferred = boost::asio::read_at(s, 0, buffers,
919 boost::asio::transfer_all());
920 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
921 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
922
923 s.reset(read_data, sizeof(read_data));
924 s.next_read_length(1);
925 memset(read_buf, 0, sizeof(read_buf));
926 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
927 boost::asio::transfer_all());
928 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
929 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
930
931 s.reset(read_data, sizeof(read_data));
932 s.next_read_length(10);
933 memset(read_buf, 0, sizeof(read_buf));
934 bytes_transferred = boost::asio::read_at(s, 0, buffers,
935 boost::asio::transfer_all());
936 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
937 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
938
939 s.reset(read_data, sizeof(read_data));
940 s.next_read_length(10);
941 memset(read_buf, 0, sizeof(read_buf));
942 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
943 boost::asio::transfer_all());
944 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
945 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
946
947 s.reset(read_data, sizeof(read_data));
948 memset(read_buf, 0, sizeof(read_buf));
949 bytes_transferred = boost::asio::read_at(s, 0, buffers,
950 boost::asio::transfer_at_least(1));
951 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
952 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
953
954 s.reset(read_data, sizeof(read_data));
955 memset(read_buf, 0, sizeof(read_buf));
956 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
957 boost::asio::transfer_at_least(1));
958 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
959 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
960
961 s.reset(read_data, sizeof(read_data));
962 s.next_read_length(1);
963 memset(read_buf, 0, sizeof(read_buf));
964 bytes_transferred = boost::asio::read_at(s, 0, buffers,
965 boost::asio::transfer_at_least(1));
966 BOOST_ASIO_CHECK(bytes_transferred == 1);
967 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
968
969 s.reset(read_data, sizeof(read_data));
970 s.next_read_length(1);
971 memset(read_buf, 0, sizeof(read_buf));
972 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
973 boost::asio::transfer_at_least(1));
974 BOOST_ASIO_CHECK(bytes_transferred == 1);
975 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
976
977 s.reset(read_data, sizeof(read_data));
978 s.next_read_length(10);
979 memset(read_buf, 0, sizeof(read_buf));
980 bytes_transferred = boost::asio::read_at(s, 0, buffers,
981 boost::asio::transfer_at_least(1));
982 BOOST_ASIO_CHECK(bytes_transferred == 10);
983 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
984
985 s.reset(read_data, sizeof(read_data));
986 s.next_read_length(10);
987 memset(read_buf, 0, sizeof(read_buf));
988 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
989 boost::asio::transfer_at_least(1));
990 BOOST_ASIO_CHECK(bytes_transferred == 10);
991 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
992
993 s.reset(read_data, sizeof(read_data));
994 memset(read_buf, 0, sizeof(read_buf));
995 bytes_transferred = boost::asio::read_at(s, 0, buffers,
996 boost::asio::transfer_at_least(10));
997 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
998 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
999
1000 s.reset(read_data, sizeof(read_data));
1001 memset(read_buf, 0, sizeof(read_buf));
1002 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1003 boost::asio::transfer_at_least(10));
1004 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1005 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1006
1007 s.reset(read_data, sizeof(read_data));
1008 s.next_read_length(1);
1009 memset(read_buf, 0, sizeof(read_buf));
1010 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1011 boost::asio::transfer_at_least(10));
1012 BOOST_ASIO_CHECK(bytes_transferred == 10);
1013 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1014
1015 s.reset(read_data, sizeof(read_data));
1016 s.next_read_length(1);
1017 memset(read_buf, 0, sizeof(read_buf));
1018 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1019 boost::asio::transfer_at_least(10));
1020 BOOST_ASIO_CHECK(bytes_transferred == 10);
1021 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1022
1023 s.reset(read_data, sizeof(read_data));
1024 s.next_read_length(10);
1025 memset(read_buf, 0, sizeof(read_buf));
1026 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1027 boost::asio::transfer_at_least(10));
1028 BOOST_ASIO_CHECK(bytes_transferred == 10);
1029 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1030
1031 s.reset(read_data, sizeof(read_data));
1032 s.next_read_length(10);
1033 memset(read_buf, 0, sizeof(read_buf));
1034 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1035 boost::asio::transfer_at_least(10));
1036 BOOST_ASIO_CHECK(bytes_transferred == 10);
1037 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1038
1039 s.reset(read_data, sizeof(read_data));
1040 memset(read_buf, 0, sizeof(read_buf));
1041 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1042 boost::asio::transfer_at_least(42));
1043 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1044 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1045
1046 s.reset(read_data, sizeof(read_data));
1047 memset(read_buf, 0, sizeof(read_buf));
1048 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1049 boost::asio::transfer_at_least(42));
1050 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1051 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1052
1053 s.reset(read_data, sizeof(read_data));
1054 s.next_read_length(1);
1055 memset(read_buf, 0, sizeof(read_buf));
1056 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1057 boost::asio::transfer_at_least(42));
1058 BOOST_ASIO_CHECK(bytes_transferred == 42);
1059 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1060
1061 s.reset(read_data, sizeof(read_data));
1062 s.next_read_length(1);
1063 memset(read_buf, 0, sizeof(read_buf));
1064 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1065 boost::asio::transfer_at_least(42));
1066 BOOST_ASIO_CHECK(bytes_transferred == 42);
1067 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1068
1069 s.reset(read_data, sizeof(read_data));
1070 s.next_read_length(10);
1071 memset(read_buf, 0, sizeof(read_buf));
1072 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1073 boost::asio::transfer_at_least(42));
1074 BOOST_ASIO_CHECK(bytes_transferred == 50);
1075 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
1076
1077 s.reset(read_data, sizeof(read_data));
1078 s.next_read_length(10);
1079 memset(read_buf, 0, sizeof(read_buf));
1080 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1081 boost::asio::transfer_at_least(42));
1082 BOOST_ASIO_CHECK(bytes_transferred == 50);
1083 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
1084
1085 s.reset(read_data, sizeof(read_data));
1086 memset(read_buf, 0, sizeof(read_buf));
1087 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1088 boost::asio::transfer_exactly(1));
1089 BOOST_ASIO_CHECK(bytes_transferred == 1);
1090 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
1091
1092 s.reset(read_data, sizeof(read_data));
1093 memset(read_buf, 0, sizeof(read_buf));
1094 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1095 boost::asio::transfer_exactly(1));
1096 BOOST_ASIO_CHECK(bytes_transferred == 1);
1097 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
1098
1099 s.reset(read_data, sizeof(read_data));
1100 s.next_read_length(1);
1101 memset(read_buf, 0, sizeof(read_buf));
1102 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1103 boost::asio::transfer_exactly(1));
1104 BOOST_ASIO_CHECK(bytes_transferred == 1);
1105 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
1106
1107 s.reset(read_data, sizeof(read_data));
1108 s.next_read_length(1);
1109 memset(read_buf, 0, sizeof(read_buf));
1110 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1111 boost::asio::transfer_exactly(1));
1112 BOOST_ASIO_CHECK(bytes_transferred == 1);
1113 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
1114
1115 s.reset(read_data, sizeof(read_data));
1116 s.next_read_length(10);
1117 memset(read_buf, 0, sizeof(read_buf));
1118 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1119 boost::asio::transfer_exactly(1));
1120 BOOST_ASIO_CHECK(bytes_transferred == 1);
1121 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
1122
1123 s.reset(read_data, sizeof(read_data));
1124 s.next_read_length(10);
1125 memset(read_buf, 0, sizeof(read_buf));
1126 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1127 boost::asio::transfer_exactly(1));
1128 BOOST_ASIO_CHECK(bytes_transferred == 1);
1129 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
1130
1131 s.reset(read_data, sizeof(read_data));
1132 memset(read_buf, 0, sizeof(read_buf));
1133 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1134 boost::asio::transfer_exactly(10));
1135 BOOST_ASIO_CHECK(bytes_transferred == 10);
1136 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1137
1138 s.reset(read_data, sizeof(read_data));
1139 memset(read_buf, 0, sizeof(read_buf));
1140 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1141 boost::asio::transfer_exactly(10));
1142 BOOST_ASIO_CHECK(bytes_transferred == 10);
1143 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1144
1145 s.reset(read_data, sizeof(read_data));
1146 s.next_read_length(1);
1147 memset(read_buf, 0, sizeof(read_buf));
1148 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1149 boost::asio::transfer_exactly(10));
1150 BOOST_ASIO_CHECK(bytes_transferred == 10);
1151 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1152
1153 s.reset(read_data, sizeof(read_data));
1154 s.next_read_length(1);
1155 memset(read_buf, 0, sizeof(read_buf));
1156 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1157 boost::asio::transfer_exactly(10));
1158 BOOST_ASIO_CHECK(bytes_transferred == 10);
1159 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1160
1161 s.reset(read_data, sizeof(read_data));
1162 s.next_read_length(10);
1163 memset(read_buf, 0, sizeof(read_buf));
1164 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1165 boost::asio::transfer_exactly(10));
1166 BOOST_ASIO_CHECK(bytes_transferred == 10);
1167 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1168
1169 s.reset(read_data, sizeof(read_data));
1170 s.next_read_length(10);
1171 memset(read_buf, 0, sizeof(read_buf));
1172 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1173 boost::asio::transfer_exactly(10));
1174 BOOST_ASIO_CHECK(bytes_transferred == 10);
1175 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1176
1177 s.reset(read_data, sizeof(read_data));
1178 memset(read_buf, 0, sizeof(read_buf));
1179 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1180 boost::asio::transfer_exactly(42));
1181 BOOST_ASIO_CHECK(bytes_transferred == 42);
1182 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1183
1184 s.reset(read_data, sizeof(read_data));
1185 memset(read_buf, 0, sizeof(read_buf));
1186 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1187 boost::asio::transfer_exactly(42));
1188 BOOST_ASIO_CHECK(bytes_transferred == 42);
1189 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1190
1191 s.reset(read_data, sizeof(read_data));
1192 s.next_read_length(1);
1193 memset(read_buf, 0, sizeof(read_buf));
1194 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1195 boost::asio::transfer_exactly(42));
1196 BOOST_ASIO_CHECK(bytes_transferred == 42);
1197 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1198
1199 s.reset(read_data, sizeof(read_data));
1200 s.next_read_length(1);
1201 memset(read_buf, 0, sizeof(read_buf));
1202 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1203 boost::asio::transfer_exactly(42));
1204 BOOST_ASIO_CHECK(bytes_transferred == 42);
1205 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1206
1207 s.reset(read_data, sizeof(read_data));
1208 s.next_read_length(10);
1209 memset(read_buf, 0, sizeof(read_buf));
1210 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1211 boost::asio::transfer_exactly(42));
1212 BOOST_ASIO_CHECK(bytes_transferred == 42);
1213 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1214
1215 s.reset(read_data, sizeof(read_data));
1216 s.next_read_length(10);
1217 memset(read_buf, 0, sizeof(read_buf));
1218 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1219 boost::asio::transfer_exactly(42));
1220 BOOST_ASIO_CHECK(bytes_transferred == 42);
1221 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1222
1223 s.reset(read_data, sizeof(read_data));
1224 memset(read_buf, 0, sizeof(read_buf));
1225 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1226 old_style_transfer_all);
1227 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1228 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1229
1230 s.reset(read_data, sizeof(read_data));
1231 memset(read_buf, 0, sizeof(read_buf));
1232 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1233 old_style_transfer_all);
1234 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1235 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1236
1237 s.reset(read_data, sizeof(read_data));
1238 s.next_read_length(1);
1239 memset(read_buf, 0, sizeof(read_buf));
1240 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1241 old_style_transfer_all);
1242 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1243 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1244
1245 s.reset(read_data, sizeof(read_data));
1246 s.next_read_length(1);
1247 memset(read_buf, 0, sizeof(read_buf));
1248 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1249 old_style_transfer_all);
1250 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1251 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1252
1253 s.reset(read_data, sizeof(read_data));
1254 s.next_read_length(10);
1255 memset(read_buf, 0, sizeof(read_buf));
1256 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1257 old_style_transfer_all);
1258 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1259 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1260
1261 s.reset(read_data, sizeof(read_data));
1262 s.next_read_length(10);
1263 memset(read_buf, 0, sizeof(read_buf));
1264 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1265 old_style_transfer_all);
1266 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1267 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1268
1269 s.reset(read_data, sizeof(read_data));
1270 memset(read_buf, 0, sizeof(read_buf));
1271 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer);
1272 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1273 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1274
1275 s.reset(read_data, sizeof(read_data));
1276 memset(read_buf, 0, sizeof(read_buf));
1277 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer);
1278 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1279 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1280
1281 s.reset(read_data, sizeof(read_data));
1282 s.next_read_length(1);
1283 memset(read_buf, 0, sizeof(read_buf));
1284 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer);
1285 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1286 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1287
1288 s.reset(read_data, sizeof(read_data));
1289 s.next_read_length(1);
1290 memset(read_buf, 0, sizeof(read_buf));
1291 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer);
1292 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1293 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1294
1295 s.reset(read_data, sizeof(read_data));
1296 s.next_read_length(10);
1297 memset(read_buf, 0, sizeof(read_buf));
1298 bytes_transferred = boost::asio::read_at(s, 0, buffers, short_transfer);
1299 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1300 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1301
1302 s.reset(read_data, sizeof(read_data));
1303 s.next_read_length(10);
1304 memset(read_buf, 0, sizeof(read_buf));
1305 bytes_transferred = boost::asio::read_at(s, 1234, buffers, short_transfer);
1306 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1307 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1308 }
1309
test_4_arg_streambuf_read_at()1310 void test_4_arg_streambuf_read_at()
1311 {
1312 boost::asio::io_service ios;
1313 test_random_access_device s(ios);
1314 boost::asio::streambuf sb(sizeof(read_data));
1315
1316 s.reset(read_data, sizeof(read_data));
1317 sb.consume(sb.size());
1318 size_t bytes_transferred = boost::asio::read_at(s, 0, sb,
1319 boost::asio::transfer_all());
1320 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1321 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1322 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1323
1324 s.reset(read_data, sizeof(read_data));
1325 sb.consume(sb.size());
1326 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1327 boost::asio::transfer_all());
1328 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1329 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1330 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1331
1332 s.reset(read_data, sizeof(read_data));
1333 s.next_read_length(1);
1334 sb.consume(sb.size());
1335 bytes_transferred = boost::asio::read_at(s, 0, sb,
1336 boost::asio::transfer_all());
1337 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1338 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1339 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1340
1341 s.reset(read_data, sizeof(read_data));
1342 s.next_read_length(1);
1343 sb.consume(sb.size());
1344 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1345 boost::asio::transfer_all());
1346 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1347 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1348 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1349
1350 s.reset(read_data, sizeof(read_data));
1351 s.next_read_length(10);
1352 sb.consume(sb.size());
1353 bytes_transferred = boost::asio::read_at(s, 0, sb,
1354 boost::asio::transfer_all());
1355 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1356 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1357 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1358
1359 s.reset(read_data, sizeof(read_data));
1360 s.next_read_length(10);
1361 sb.consume(sb.size());
1362 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1363 boost::asio::transfer_all());
1364 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1365 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1366 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1367
1368 s.reset(read_data, sizeof(read_data));
1369 sb.consume(sb.size());
1370 bytes_transferred = boost::asio::read_at(s, 0, sb,
1371 boost::asio::transfer_at_least(1));
1372 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1373 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1374 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1375
1376 s.reset(read_data, sizeof(read_data));
1377 sb.consume(sb.size());
1378 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1379 boost::asio::transfer_at_least(1));
1380 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1381 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1382 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1383
1384 s.reset(read_data, sizeof(read_data));
1385 s.next_read_length(1);
1386 sb.consume(sb.size());
1387 bytes_transferred = boost::asio::read_at(s, 0, sb,
1388 boost::asio::transfer_at_least(1));
1389 BOOST_ASIO_CHECK(bytes_transferred == 1);
1390 BOOST_ASIO_CHECK(sb.size() == 1);
1391 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
1392
1393 s.reset(read_data, sizeof(read_data));
1394 s.next_read_length(1);
1395 sb.consume(sb.size());
1396 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1397 boost::asio::transfer_at_least(1));
1398 BOOST_ASIO_CHECK(bytes_transferred == 1);
1399 BOOST_ASIO_CHECK(sb.size() == 1);
1400 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
1401
1402 s.reset(read_data, sizeof(read_data));
1403 s.next_read_length(10);
1404 sb.consume(sb.size());
1405 bytes_transferred = boost::asio::read_at(s, 0, sb,
1406 boost::asio::transfer_at_least(1));
1407 BOOST_ASIO_CHECK(bytes_transferred == 10);
1408 BOOST_ASIO_CHECK(sb.size() == 10);
1409 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1410
1411 s.reset(read_data, sizeof(read_data));
1412 s.next_read_length(10);
1413 sb.consume(sb.size());
1414 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1415 boost::asio::transfer_at_least(1));
1416 BOOST_ASIO_CHECK(bytes_transferred == 10);
1417 BOOST_ASIO_CHECK(sb.size() == 10);
1418 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1419
1420 s.reset(read_data, sizeof(read_data));
1421 sb.consume(sb.size());
1422 bytes_transferred = boost::asio::read_at(s, 0, sb,
1423 boost::asio::transfer_at_least(10));
1424 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1425 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1426 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1427
1428 s.reset(read_data, sizeof(read_data));
1429 sb.consume(sb.size());
1430 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1431 boost::asio::transfer_at_least(10));
1432 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1433 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1434 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1435
1436 s.reset(read_data, sizeof(read_data));
1437 s.next_read_length(1);
1438 sb.consume(sb.size());
1439 bytes_transferred = boost::asio::read_at(s, 0, sb,
1440 boost::asio::transfer_at_least(10));
1441 BOOST_ASIO_CHECK(bytes_transferred == 10);
1442 BOOST_ASIO_CHECK(sb.size() == 10);
1443 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1444
1445 s.reset(read_data, sizeof(read_data));
1446 s.next_read_length(1);
1447 sb.consume(sb.size());
1448 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1449 boost::asio::transfer_at_least(10));
1450 BOOST_ASIO_CHECK(bytes_transferred == 10);
1451 BOOST_ASIO_CHECK(sb.size() == 10);
1452 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1453
1454 s.reset(read_data, sizeof(read_data));
1455 s.next_read_length(10);
1456 sb.consume(sb.size());
1457 bytes_transferred = boost::asio::read_at(s, 0, sb,
1458 boost::asio::transfer_at_least(10));
1459 BOOST_ASIO_CHECK(bytes_transferred == 10);
1460 BOOST_ASIO_CHECK(sb.size() == 10);
1461 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1462
1463 s.reset(read_data, sizeof(read_data));
1464 s.next_read_length(10);
1465 sb.consume(sb.size());
1466 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1467 boost::asio::transfer_at_least(10));
1468 BOOST_ASIO_CHECK(bytes_transferred == 10);
1469 BOOST_ASIO_CHECK(sb.size() == 10);
1470 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1471
1472 s.reset(read_data, sizeof(read_data));
1473 sb.consume(sb.size());
1474 bytes_transferred = boost::asio::read_at(s, 0, sb,
1475 boost::asio::transfer_at_least(42));
1476 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1477 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1478 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1479
1480 s.reset(read_data, sizeof(read_data));
1481 sb.consume(sb.size());
1482 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1483 boost::asio::transfer_at_least(42));
1484 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1485 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1486 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1487
1488 s.reset(read_data, sizeof(read_data));
1489 s.next_read_length(1);
1490 sb.consume(sb.size());
1491 bytes_transferred = boost::asio::read_at(s, 0, sb,
1492 boost::asio::transfer_at_least(42));
1493 BOOST_ASIO_CHECK(bytes_transferred == 42);
1494 BOOST_ASIO_CHECK(sb.size() == 42);
1495 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
1496
1497 s.reset(read_data, sizeof(read_data));
1498 s.next_read_length(1);
1499 sb.consume(sb.size());
1500 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1501 boost::asio::transfer_at_least(42));
1502 BOOST_ASIO_CHECK(bytes_transferred == 42);
1503 BOOST_ASIO_CHECK(sb.size() == 42);
1504 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
1505
1506 s.reset(read_data, sizeof(read_data));
1507 s.next_read_length(10);
1508 sb.consume(sb.size());
1509 bytes_transferred = boost::asio::read_at(s, 0, sb,
1510 boost::asio::transfer_at_least(42));
1511 BOOST_ASIO_CHECK(bytes_transferred == 50);
1512 BOOST_ASIO_CHECK(sb.size() == 50);
1513 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 50));
1514
1515 s.reset(read_data, sizeof(read_data));
1516 s.next_read_length(10);
1517 sb.consume(sb.size());
1518 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1519 boost::asio::transfer_at_least(42));
1520 BOOST_ASIO_CHECK(bytes_transferred == 50);
1521 BOOST_ASIO_CHECK(sb.size() == 50);
1522 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 50));
1523
1524 s.reset(read_data, sizeof(read_data));
1525 sb.consume(sb.size());
1526 bytes_transferred = boost::asio::read_at(s, 0, sb,
1527 boost::asio::transfer_exactly(1));
1528 BOOST_ASIO_CHECK(bytes_transferred == 1);
1529 BOOST_ASIO_CHECK(sb.size() == 1);
1530 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
1531
1532 s.reset(read_data, sizeof(read_data));
1533 sb.consume(sb.size());
1534 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1535 boost::asio::transfer_exactly(1));
1536 BOOST_ASIO_CHECK(bytes_transferred == 1);
1537 BOOST_ASIO_CHECK(sb.size() == 1);
1538 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
1539
1540 s.reset(read_data, sizeof(read_data));
1541 s.next_read_length(1);
1542 sb.consume(sb.size());
1543 bytes_transferred = boost::asio::read_at(s, 0, sb,
1544 boost::asio::transfer_exactly(1));
1545 BOOST_ASIO_CHECK(bytes_transferred == 1);
1546 BOOST_ASIO_CHECK(sb.size() == 1);
1547 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
1548
1549 s.reset(read_data, sizeof(read_data));
1550 s.next_read_length(1);
1551 sb.consume(sb.size());
1552 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1553 boost::asio::transfer_exactly(1));
1554 BOOST_ASIO_CHECK(bytes_transferred == 1);
1555 BOOST_ASIO_CHECK(sb.size() == 1);
1556 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
1557
1558 s.reset(read_data, sizeof(read_data));
1559 s.next_read_length(10);
1560 sb.consume(sb.size());
1561 bytes_transferred = boost::asio::read_at(s, 0, sb,
1562 boost::asio::transfer_exactly(1));
1563 BOOST_ASIO_CHECK(bytes_transferred == 1);
1564 BOOST_ASIO_CHECK(sb.size() == 1);
1565 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
1566
1567 s.reset(read_data, sizeof(read_data));
1568 s.next_read_length(10);
1569 sb.consume(sb.size());
1570 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1571 boost::asio::transfer_exactly(1));
1572 BOOST_ASIO_CHECK(bytes_transferred == 1);
1573 BOOST_ASIO_CHECK(sb.size() == 1);
1574 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
1575
1576 s.reset(read_data, sizeof(read_data));
1577 sb.consume(sb.size());
1578 bytes_transferred = boost::asio::read_at(s, 0, sb,
1579 boost::asio::transfer_exactly(10));
1580 BOOST_ASIO_CHECK(bytes_transferred == 10);
1581 BOOST_ASIO_CHECK(sb.size() == 10);
1582 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1583
1584 s.reset(read_data, sizeof(read_data));
1585 sb.consume(sb.size());
1586 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1587 boost::asio::transfer_exactly(10));
1588 BOOST_ASIO_CHECK(bytes_transferred == 10);
1589 BOOST_ASIO_CHECK(sb.size() == 10);
1590 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1591
1592 s.reset(read_data, sizeof(read_data));
1593 s.next_read_length(1);
1594 sb.consume(sb.size());
1595 bytes_transferred = boost::asio::read_at(s, 0, sb,
1596 boost::asio::transfer_exactly(10));
1597 BOOST_ASIO_CHECK(bytes_transferred == 10);
1598 BOOST_ASIO_CHECK(sb.size() == 10);
1599 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1600
1601 s.reset(read_data, sizeof(read_data));
1602 s.next_read_length(1);
1603 sb.consume(sb.size());
1604 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1605 boost::asio::transfer_exactly(10));
1606 BOOST_ASIO_CHECK(bytes_transferred == 10);
1607 BOOST_ASIO_CHECK(sb.size() == 10);
1608 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1609
1610 s.reset(read_data, sizeof(read_data));
1611 s.next_read_length(10);
1612 sb.consume(sb.size());
1613 bytes_transferred = boost::asio::read_at(s, 0, sb,
1614 boost::asio::transfer_exactly(10));
1615 BOOST_ASIO_CHECK(bytes_transferred == 10);
1616 BOOST_ASIO_CHECK(sb.size() == 10);
1617 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
1618
1619 s.reset(read_data, sizeof(read_data));
1620 s.next_read_length(10);
1621 sb.consume(sb.size());
1622 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1623 boost::asio::transfer_exactly(10));
1624 BOOST_ASIO_CHECK(bytes_transferred == 10);
1625 BOOST_ASIO_CHECK(sb.size() == 10);
1626 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
1627
1628 s.reset(read_data, sizeof(read_data));
1629 sb.consume(sb.size());
1630 bytes_transferred = boost::asio::read_at(s, 0, sb,
1631 boost::asio::transfer_exactly(42));
1632 BOOST_ASIO_CHECK(bytes_transferred == 42);
1633 BOOST_ASIO_CHECK(sb.size() == 42);
1634 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
1635
1636 s.reset(read_data, sizeof(read_data));
1637 sb.consume(sb.size());
1638 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1639 boost::asio::transfer_exactly(42));
1640 BOOST_ASIO_CHECK(bytes_transferred == 42);
1641 BOOST_ASIO_CHECK(sb.size() == 42);
1642 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
1643
1644 s.reset(read_data, sizeof(read_data));
1645 s.next_read_length(1);
1646 sb.consume(sb.size());
1647 bytes_transferred = boost::asio::read_at(s, 0, sb,
1648 boost::asio::transfer_exactly(42));
1649 BOOST_ASIO_CHECK(bytes_transferred == 42);
1650 BOOST_ASIO_CHECK(sb.size() == 42);
1651 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
1652
1653 s.reset(read_data, sizeof(read_data));
1654 s.next_read_length(1);
1655 sb.consume(sb.size());
1656 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1657 boost::asio::transfer_exactly(42));
1658 BOOST_ASIO_CHECK(bytes_transferred == 42);
1659 BOOST_ASIO_CHECK(sb.size() == 42);
1660 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
1661
1662 s.reset(read_data, sizeof(read_data));
1663 s.next_read_length(10);
1664 sb.consume(sb.size());
1665 bytes_transferred = boost::asio::read_at(s, 0, sb,
1666 boost::asio::transfer_exactly(42));
1667 BOOST_ASIO_CHECK(bytes_transferred == 42);
1668 BOOST_ASIO_CHECK(sb.size() == 42);
1669 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
1670
1671 s.reset(read_data, sizeof(read_data));
1672 s.next_read_length(10);
1673 sb.consume(sb.size());
1674 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1675 boost::asio::transfer_exactly(42));
1676 BOOST_ASIO_CHECK(bytes_transferred == 42);
1677 BOOST_ASIO_CHECK(sb.size() == 42);
1678 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
1679
1680 s.reset(read_data, sizeof(read_data));
1681 sb.consume(sb.size());
1682 bytes_transferred = boost::asio::read_at(s, 0, sb,
1683 old_style_transfer_all);
1684 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1685 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1686 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1687
1688 s.reset(read_data, sizeof(read_data));
1689 sb.consume(sb.size());
1690 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1691 old_style_transfer_all);
1692 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1693 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1694 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1695
1696 s.reset(read_data, sizeof(read_data));
1697 s.next_read_length(1);
1698 sb.consume(sb.size());
1699 bytes_transferred = boost::asio::read_at(s, 0, sb,
1700 old_style_transfer_all);
1701 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1702 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1703 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1704
1705 s.reset(read_data, sizeof(read_data));
1706 s.next_read_length(1);
1707 sb.consume(sb.size());
1708 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1709 old_style_transfer_all);
1710 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1711 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1712 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1713
1714 s.reset(read_data, sizeof(read_data));
1715 s.next_read_length(10);
1716 sb.consume(sb.size());
1717 bytes_transferred = boost::asio::read_at(s, 0, sb,
1718 old_style_transfer_all);
1719 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1720 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1721 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1722
1723 s.reset(read_data, sizeof(read_data));
1724 s.next_read_length(10);
1725 sb.consume(sb.size());
1726 bytes_transferred = boost::asio::read_at(s, 1234, sb,
1727 old_style_transfer_all);
1728 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1729 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1730 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1731
1732 s.reset(read_data, sizeof(read_data));
1733 sb.consume(sb.size());
1734 bytes_transferred = boost::asio::read_at(s, 0, sb, short_transfer);
1735 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1736 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1737 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1738
1739 s.reset(read_data, sizeof(read_data));
1740 sb.consume(sb.size());
1741 bytes_transferred = boost::asio::read_at(s, 1234, sb, short_transfer);
1742 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1743 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1744 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1745
1746 s.reset(read_data, sizeof(read_data));
1747 s.next_read_length(1);
1748 sb.consume(sb.size());
1749 bytes_transferred = boost::asio::read_at(s, 0, sb, short_transfer);
1750 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1751 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1752 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1753
1754 s.reset(read_data, sizeof(read_data));
1755 s.next_read_length(1);
1756 sb.consume(sb.size());
1757 bytes_transferred = boost::asio::read_at(s, 1234, sb, short_transfer);
1758 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1759 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1760 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1761
1762 s.reset(read_data, sizeof(read_data));
1763 s.next_read_length(10);
1764 sb.consume(sb.size());
1765 bytes_transferred = boost::asio::read_at(s, 0, sb, short_transfer);
1766 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1767 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1768 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
1769
1770 s.reset(read_data, sizeof(read_data));
1771 s.next_read_length(10);
1772 sb.consume(sb.size());
1773 bytes_transferred = boost::asio::read_at(s, 1234, sb, short_transfer);
1774 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1775 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
1776 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
1777 }
1778
test_5_arg_mutable_buffers_1_read_at()1779 void test_5_arg_mutable_buffers_1_read_at()
1780 {
1781 boost::asio::io_service ios;
1782 test_random_access_device s(ios);
1783 char read_buf[sizeof(read_data)];
1784 boost::asio::mutable_buffers_1 buffers
1785 = boost::asio::buffer(read_buf, sizeof(read_buf));
1786
1787 s.reset(read_data, sizeof(read_data));
1788 memset(read_buf, 0, sizeof(read_buf));
1789 boost::system::error_code error;
1790 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers,
1791 boost::asio::transfer_all(), error);
1792 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1793 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1794 BOOST_ASIO_CHECK(!error);
1795
1796 s.reset(read_data, sizeof(read_data));
1797 memset(read_buf, 0, sizeof(read_buf));
1798 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1799 boost::asio::transfer_all(), error);
1800 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1801 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1802 BOOST_ASIO_CHECK(!error);
1803
1804 s.reset(read_data, sizeof(read_data));
1805 s.next_read_length(1);
1806 memset(read_buf, 0, sizeof(read_buf));
1807 error = boost::system::error_code();
1808 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1809 boost::asio::transfer_all(), error);
1810 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1811 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1812 BOOST_ASIO_CHECK(!error);
1813
1814 s.reset(read_data, sizeof(read_data));
1815 s.next_read_length(1);
1816 memset(read_buf, 0, sizeof(read_buf));
1817 error = boost::system::error_code();
1818 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1819 boost::asio::transfer_all(), error);
1820 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1821 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1822 BOOST_ASIO_CHECK(!error);
1823
1824 s.reset(read_data, sizeof(read_data));
1825 s.next_read_length(10);
1826 memset(read_buf, 0, sizeof(read_buf));
1827 error = boost::system::error_code();
1828 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1829 boost::asio::transfer_all(), error);
1830 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1831 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1832 BOOST_ASIO_CHECK(!error);
1833
1834 s.reset(read_data, sizeof(read_data));
1835 s.next_read_length(10);
1836 memset(read_buf, 0, sizeof(read_buf));
1837 error = boost::system::error_code();
1838 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1839 boost::asio::transfer_all(), error);
1840 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1841 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1842 BOOST_ASIO_CHECK(!error);
1843
1844 s.reset(read_data, sizeof(read_data));
1845 memset(read_buf, 0, sizeof(read_buf));
1846 error = boost::system::error_code();
1847 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1848 boost::asio::transfer_at_least(1), error);
1849 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1850 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1851 BOOST_ASIO_CHECK(!error);
1852
1853 s.reset(read_data, sizeof(read_data));
1854 memset(read_buf, 0, sizeof(read_buf));
1855 error = boost::system::error_code();
1856 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1857 boost::asio::transfer_at_least(1), error);
1858 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1859 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1860 BOOST_ASIO_CHECK(!error);
1861
1862 s.reset(read_data, sizeof(read_data));
1863 s.next_read_length(1);
1864 memset(read_buf, 0, sizeof(read_buf));
1865 error = boost::system::error_code();
1866 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1867 boost::asio::transfer_at_least(1), error);
1868 BOOST_ASIO_CHECK(bytes_transferred == 1);
1869 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
1870 BOOST_ASIO_CHECK(!error);
1871
1872 s.reset(read_data, sizeof(read_data));
1873 s.next_read_length(1);
1874 memset(read_buf, 0, sizeof(read_buf));
1875 error = boost::system::error_code();
1876 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1877 boost::asio::transfer_at_least(1), error);
1878 BOOST_ASIO_CHECK(bytes_transferred == 1);
1879 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
1880 BOOST_ASIO_CHECK(!error);
1881
1882 s.reset(read_data, sizeof(read_data));
1883 s.next_read_length(10);
1884 memset(read_buf, 0, sizeof(read_buf));
1885 error = boost::system::error_code();
1886 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1887 boost::asio::transfer_at_least(1), error);
1888 BOOST_ASIO_CHECK(bytes_transferred == 10);
1889 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1890 BOOST_ASIO_CHECK(!error);
1891
1892 s.reset(read_data, sizeof(read_data));
1893 s.next_read_length(10);
1894 memset(read_buf, 0, sizeof(read_buf));
1895 error = boost::system::error_code();
1896 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1897 boost::asio::transfer_at_least(1), error);
1898 BOOST_ASIO_CHECK(bytes_transferred == 10);
1899 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1900 BOOST_ASIO_CHECK(!error);
1901
1902 s.reset(read_data, sizeof(read_data));
1903 memset(read_buf, 0, sizeof(read_buf));
1904 error = boost::system::error_code();
1905 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1906 boost::asio::transfer_at_least(10), error);
1907 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1908 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1909 BOOST_ASIO_CHECK(!error);
1910
1911 s.reset(read_data, sizeof(read_data));
1912 memset(read_buf, 0, sizeof(read_buf));
1913 error = boost::system::error_code();
1914 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1915 boost::asio::transfer_at_least(10), error);
1916 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1917 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1918 BOOST_ASIO_CHECK(!error);
1919
1920 s.reset(read_data, sizeof(read_data));
1921 s.next_read_length(1);
1922 memset(read_buf, 0, sizeof(read_buf));
1923 error = boost::system::error_code();
1924 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1925 boost::asio::transfer_at_least(10), error);
1926 BOOST_ASIO_CHECK(bytes_transferred == 10);
1927 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1928 BOOST_ASIO_CHECK(!error);
1929
1930 s.reset(read_data, sizeof(read_data));
1931 s.next_read_length(1);
1932 memset(read_buf, 0, sizeof(read_buf));
1933 error = boost::system::error_code();
1934 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1935 boost::asio::transfer_at_least(10), error);
1936 BOOST_ASIO_CHECK(bytes_transferred == 10);
1937 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1938 BOOST_ASIO_CHECK(!error);
1939
1940 s.reset(read_data, sizeof(read_data));
1941 s.next_read_length(10);
1942 memset(read_buf, 0, sizeof(read_buf));
1943 error = boost::system::error_code();
1944 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1945 boost::asio::transfer_at_least(10), error);
1946 BOOST_ASIO_CHECK(bytes_transferred == 10);
1947 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
1948 BOOST_ASIO_CHECK(!error);
1949
1950 s.reset(read_data, sizeof(read_data));
1951 s.next_read_length(10);
1952 memset(read_buf, 0, sizeof(read_buf));
1953 error = boost::system::error_code();
1954 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1955 boost::asio::transfer_at_least(10), error);
1956 BOOST_ASIO_CHECK(bytes_transferred == 10);
1957 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
1958 BOOST_ASIO_CHECK(!error);
1959
1960 s.reset(read_data, sizeof(read_data));
1961 memset(read_buf, 0, sizeof(read_buf));
1962 error = boost::system::error_code();
1963 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1964 boost::asio::transfer_at_least(42), error);
1965 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1966 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
1967 BOOST_ASIO_CHECK(!error);
1968
1969 s.reset(read_data, sizeof(read_data));
1970 memset(read_buf, 0, sizeof(read_buf));
1971 error = boost::system::error_code();
1972 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1973 boost::asio::transfer_at_least(42), error);
1974 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
1975 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
1976 BOOST_ASIO_CHECK(!error);
1977
1978 s.reset(read_data, sizeof(read_data));
1979 s.next_read_length(1);
1980 memset(read_buf, 0, sizeof(read_buf));
1981 error = boost::system::error_code();
1982 bytes_transferred = boost::asio::read_at(s, 0, buffers,
1983 boost::asio::transfer_at_least(42), error);
1984 BOOST_ASIO_CHECK(bytes_transferred == 42);
1985 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
1986 BOOST_ASIO_CHECK(!error);
1987
1988 s.reset(read_data, sizeof(read_data));
1989 s.next_read_length(1);
1990 memset(read_buf, 0, sizeof(read_buf));
1991 error = boost::system::error_code();
1992 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
1993 boost::asio::transfer_at_least(42), error);
1994 BOOST_ASIO_CHECK(bytes_transferred == 42);
1995 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
1996 BOOST_ASIO_CHECK(!error);
1997
1998 s.reset(read_data, sizeof(read_data));
1999 s.next_read_length(10);
2000 memset(read_buf, 0, sizeof(read_buf));
2001 error = boost::system::error_code();
2002 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2003 boost::asio::transfer_at_least(42), error);
2004 BOOST_ASIO_CHECK(bytes_transferred == 50);
2005 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
2006 BOOST_ASIO_CHECK(!error);
2007
2008 s.reset(read_data, sizeof(read_data));
2009 s.next_read_length(10);
2010 memset(read_buf, 0, sizeof(read_buf));
2011 error = boost::system::error_code();
2012 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2013 boost::asio::transfer_at_least(42), error);
2014 BOOST_ASIO_CHECK(bytes_transferred == 50);
2015 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
2016 BOOST_ASIO_CHECK(!error);
2017
2018 s.reset(read_data, sizeof(read_data));
2019 memset(read_buf, 0, sizeof(read_buf));
2020 error = boost::system::error_code();
2021 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2022 boost::asio::transfer_exactly(1), error);
2023 BOOST_ASIO_CHECK(bytes_transferred == 1);
2024 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2025 BOOST_ASIO_CHECK(!error);
2026
2027 s.reset(read_data, sizeof(read_data));
2028 memset(read_buf, 0, sizeof(read_buf));
2029 error = boost::system::error_code();
2030 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2031 boost::asio::transfer_exactly(1), error);
2032 BOOST_ASIO_CHECK(bytes_transferred == 1);
2033 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2034 BOOST_ASIO_CHECK(!error);
2035
2036 s.reset(read_data, sizeof(read_data));
2037 s.next_read_length(1);
2038 memset(read_buf, 0, sizeof(read_buf));
2039 error = boost::system::error_code();
2040 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2041 boost::asio::transfer_exactly(1), error);
2042 BOOST_ASIO_CHECK(bytes_transferred == 1);
2043 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2044 BOOST_ASIO_CHECK(!error);
2045
2046 s.reset(read_data, sizeof(read_data));
2047 s.next_read_length(1);
2048 memset(read_buf, 0, sizeof(read_buf));
2049 error = boost::system::error_code();
2050 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2051 boost::asio::transfer_exactly(1), error);
2052 BOOST_ASIO_CHECK(bytes_transferred == 1);
2053 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2054 BOOST_ASIO_CHECK(!error);
2055
2056 s.reset(read_data, sizeof(read_data));
2057 s.next_read_length(10);
2058 memset(read_buf, 0, sizeof(read_buf));
2059 error = boost::system::error_code();
2060 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2061 boost::asio::transfer_exactly(1), error);
2062 BOOST_ASIO_CHECK(bytes_transferred == 1);
2063 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2064 BOOST_ASIO_CHECK(!error);
2065
2066 s.reset(read_data, sizeof(read_data));
2067 s.next_read_length(10);
2068 memset(read_buf, 0, sizeof(read_buf));
2069 error = boost::system::error_code();
2070 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2071 boost::asio::transfer_exactly(1), error);
2072 BOOST_ASIO_CHECK(bytes_transferred == 1);
2073 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2074 BOOST_ASIO_CHECK(!error);
2075
2076 s.reset(read_data, sizeof(read_data));
2077 memset(read_buf, 0, sizeof(read_buf));
2078 error = boost::system::error_code();
2079 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2080 boost::asio::transfer_exactly(10), error);
2081 BOOST_ASIO_CHECK(bytes_transferred == 10);
2082 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2083 BOOST_ASIO_CHECK(!error);
2084
2085 s.reset(read_data, sizeof(read_data));
2086 memset(read_buf, 0, sizeof(read_buf));
2087 error = boost::system::error_code();
2088 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2089 boost::asio::transfer_exactly(10), error);
2090 BOOST_ASIO_CHECK(bytes_transferred == 10);
2091 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2092 BOOST_ASIO_CHECK(!error);
2093
2094 s.reset(read_data, sizeof(read_data));
2095 s.next_read_length(1);
2096 memset(read_buf, 0, sizeof(read_buf));
2097 error = boost::system::error_code();
2098 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2099 boost::asio::transfer_exactly(10), error);
2100 BOOST_ASIO_CHECK(bytes_transferred == 10);
2101 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2102 BOOST_ASIO_CHECK(!error);
2103
2104 s.reset(read_data, sizeof(read_data));
2105 s.next_read_length(1);
2106 memset(read_buf, 0, sizeof(read_buf));
2107 error = boost::system::error_code();
2108 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2109 boost::asio::transfer_exactly(10), error);
2110 BOOST_ASIO_CHECK(bytes_transferred == 10);
2111 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2112 BOOST_ASIO_CHECK(!error);
2113
2114 s.reset(read_data, sizeof(read_data));
2115 s.next_read_length(10);
2116 memset(read_buf, 0, sizeof(read_buf));
2117 error = boost::system::error_code();
2118 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2119 boost::asio::transfer_exactly(10), error);
2120 BOOST_ASIO_CHECK(bytes_transferred == 10);
2121 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2122 BOOST_ASIO_CHECK(!error);
2123
2124 s.reset(read_data, sizeof(read_data));
2125 s.next_read_length(10);
2126 memset(read_buf, 0, sizeof(read_buf));
2127 error = boost::system::error_code();
2128 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2129 boost::asio::transfer_exactly(10), error);
2130 BOOST_ASIO_CHECK(bytes_transferred == 10);
2131 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2132 BOOST_ASIO_CHECK(!error);
2133
2134 s.reset(read_data, sizeof(read_data));
2135 memset(read_buf, 0, sizeof(read_buf));
2136 error = boost::system::error_code();
2137 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2138 boost::asio::transfer_exactly(42), error);
2139 BOOST_ASIO_CHECK(bytes_transferred == 42);
2140 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2141 BOOST_ASIO_CHECK(!error);
2142
2143 s.reset(read_data, sizeof(read_data));
2144 memset(read_buf, 0, sizeof(read_buf));
2145 error = boost::system::error_code();
2146 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2147 boost::asio::transfer_exactly(42), error);
2148 BOOST_ASIO_CHECK(bytes_transferred == 42);
2149 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2150 BOOST_ASIO_CHECK(!error);
2151
2152 s.reset(read_data, sizeof(read_data));
2153 s.next_read_length(1);
2154 memset(read_buf, 0, sizeof(read_buf));
2155 error = boost::system::error_code();
2156 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2157 boost::asio::transfer_exactly(42), error);
2158 BOOST_ASIO_CHECK(bytes_transferred == 42);
2159 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2160 BOOST_ASIO_CHECK(!error);
2161
2162 s.reset(read_data, sizeof(read_data));
2163 s.next_read_length(1);
2164 memset(read_buf, 0, sizeof(read_buf));
2165 error = boost::system::error_code();
2166 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2167 boost::asio::transfer_exactly(42), error);
2168 BOOST_ASIO_CHECK(bytes_transferred == 42);
2169 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2170 BOOST_ASIO_CHECK(!error);
2171
2172 s.reset(read_data, sizeof(read_data));
2173 s.next_read_length(10);
2174 memset(read_buf, 0, sizeof(read_buf));
2175 error = boost::system::error_code();
2176 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2177 boost::asio::transfer_exactly(42), error);
2178 BOOST_ASIO_CHECK(bytes_transferred == 42);
2179 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2180 BOOST_ASIO_CHECK(!error);
2181
2182 s.reset(read_data, sizeof(read_data));
2183 s.next_read_length(10);
2184 memset(read_buf, 0, sizeof(read_buf));
2185 error = boost::system::error_code();
2186 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2187 boost::asio::transfer_exactly(42), error);
2188 BOOST_ASIO_CHECK(bytes_transferred == 42);
2189 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2190 BOOST_ASIO_CHECK(!error);
2191
2192 s.reset(read_data, sizeof(read_data));
2193 memset(read_buf, 0, sizeof(read_buf));
2194 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2195 old_style_transfer_all, error);
2196 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2197 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2198 BOOST_ASIO_CHECK(!error);
2199
2200 s.reset(read_data, sizeof(read_data));
2201 memset(read_buf, 0, sizeof(read_buf));
2202 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2203 old_style_transfer_all, error);
2204 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2205 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2206 BOOST_ASIO_CHECK(!error);
2207
2208 s.reset(read_data, sizeof(read_data));
2209 s.next_read_length(1);
2210 memset(read_buf, 0, sizeof(read_buf));
2211 error = boost::system::error_code();
2212 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2213 old_style_transfer_all, error);
2214 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2215 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2216 BOOST_ASIO_CHECK(!error);
2217
2218 s.reset(read_data, sizeof(read_data));
2219 s.next_read_length(1);
2220 memset(read_buf, 0, sizeof(read_buf));
2221 error = boost::system::error_code();
2222 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2223 old_style_transfer_all, error);
2224 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2225 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2226 BOOST_ASIO_CHECK(!error);
2227
2228 s.reset(read_data, sizeof(read_data));
2229 s.next_read_length(10);
2230 memset(read_buf, 0, sizeof(read_buf));
2231 error = boost::system::error_code();
2232 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2233 old_style_transfer_all, error);
2234 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2235 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2236 BOOST_ASIO_CHECK(!error);
2237
2238 s.reset(read_data, sizeof(read_data));
2239 s.next_read_length(10);
2240 memset(read_buf, 0, sizeof(read_buf));
2241 error = boost::system::error_code();
2242 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2243 old_style_transfer_all, error);
2244 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2245 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2246 BOOST_ASIO_CHECK(!error);
2247
2248 s.reset(read_data, sizeof(read_data));
2249 memset(read_buf, 0, sizeof(read_buf));
2250 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2251 short_transfer, error);
2252 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2253 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2254 BOOST_ASIO_CHECK(!error);
2255
2256 s.reset(read_data, sizeof(read_data));
2257 memset(read_buf, 0, sizeof(read_buf));
2258 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2259 short_transfer, error);
2260 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2261 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2262 BOOST_ASIO_CHECK(!error);
2263
2264 s.reset(read_data, sizeof(read_data));
2265 s.next_read_length(1);
2266 memset(read_buf, 0, sizeof(read_buf));
2267 error = boost::system::error_code();
2268 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2269 short_transfer, error);
2270 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2271 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2272 BOOST_ASIO_CHECK(!error);
2273
2274 s.reset(read_data, sizeof(read_data));
2275 s.next_read_length(1);
2276 memset(read_buf, 0, sizeof(read_buf));
2277 error = boost::system::error_code();
2278 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2279 short_transfer, error);
2280 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2281 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2282 BOOST_ASIO_CHECK(!error);
2283
2284 s.reset(read_data, sizeof(read_data));
2285 s.next_read_length(10);
2286 memset(read_buf, 0, sizeof(read_buf));
2287 error = boost::system::error_code();
2288 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2289 short_transfer, error);
2290 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2291 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2292 BOOST_ASIO_CHECK(!error);
2293
2294 s.reset(read_data, sizeof(read_data));
2295 s.next_read_length(10);
2296 memset(read_buf, 0, sizeof(read_buf));
2297 error = boost::system::error_code();
2298 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2299 short_transfer, error);
2300 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2301 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2302 BOOST_ASIO_CHECK(!error);
2303 }
2304
test_5_arg_vector_buffers_read_at()2305 void test_5_arg_vector_buffers_read_at()
2306 {
2307 boost::asio::io_service ios;
2308 test_random_access_device s(ios);
2309 char read_buf[sizeof(read_data)];
2310 std::vector<boost::asio::mutable_buffer> buffers;
2311 buffers.push_back(boost::asio::buffer(read_buf, 32));
2312 buffers.push_back(boost::asio::buffer(read_buf) + 32);
2313
2314 s.reset(read_data, sizeof(read_data));
2315 memset(read_buf, 0, sizeof(read_buf));
2316 boost::system::error_code error;
2317 size_t bytes_transferred = boost::asio::read_at(s, 0, buffers,
2318 boost::asio::transfer_all(), error);
2319 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2320 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2321 BOOST_ASIO_CHECK(!error);
2322
2323 s.reset(read_data, sizeof(read_data));
2324 memset(read_buf, 0, sizeof(read_buf));
2325 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2326 boost::asio::transfer_all(), error);
2327 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2328 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2329 BOOST_ASIO_CHECK(!error);
2330
2331 s.reset(read_data, sizeof(read_data));
2332 s.next_read_length(1);
2333 memset(read_buf, 0, sizeof(read_buf));
2334 error = boost::system::error_code();
2335 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2336 boost::asio::transfer_all(), error);
2337 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2338 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2339 BOOST_ASIO_CHECK(!error);
2340
2341 s.reset(read_data, sizeof(read_data));
2342 s.next_read_length(1);
2343 memset(read_buf, 0, sizeof(read_buf));
2344 error = boost::system::error_code();
2345 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2346 boost::asio::transfer_all(), error);
2347 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2348 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2349 BOOST_ASIO_CHECK(!error);
2350
2351 s.reset(read_data, sizeof(read_data));
2352 s.next_read_length(10);
2353 memset(read_buf, 0, sizeof(read_buf));
2354 error = boost::system::error_code();
2355 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2356 boost::asio::transfer_all(), error);
2357 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2358 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2359 BOOST_ASIO_CHECK(!error);
2360
2361 s.reset(read_data, sizeof(read_data));
2362 s.next_read_length(10);
2363 memset(read_buf, 0, sizeof(read_buf));
2364 error = boost::system::error_code();
2365 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2366 boost::asio::transfer_all(), error);
2367 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2368 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2369 BOOST_ASIO_CHECK(!error);
2370
2371 s.reset(read_data, sizeof(read_data));
2372 memset(read_buf, 0, sizeof(read_buf));
2373 error = boost::system::error_code();
2374 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2375 boost::asio::transfer_at_least(1), error);
2376 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2377 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2378 BOOST_ASIO_CHECK(!error);
2379
2380 s.reset(read_data, sizeof(read_data));
2381 memset(read_buf, 0, sizeof(read_buf));
2382 error = boost::system::error_code();
2383 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2384 boost::asio::transfer_at_least(1), error);
2385 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2386 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2387 BOOST_ASIO_CHECK(!error);
2388
2389 s.reset(read_data, sizeof(read_data));
2390 s.next_read_length(1);
2391 memset(read_buf, 0, sizeof(read_buf));
2392 error = boost::system::error_code();
2393 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2394 boost::asio::transfer_at_least(1), error);
2395 BOOST_ASIO_CHECK(bytes_transferred == 1);
2396 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2397 BOOST_ASIO_CHECK(!error);
2398
2399 s.reset(read_data, sizeof(read_data));
2400 s.next_read_length(1);
2401 memset(read_buf, 0, sizeof(read_buf));
2402 error = boost::system::error_code();
2403 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2404 boost::asio::transfer_at_least(1), error);
2405 BOOST_ASIO_CHECK(bytes_transferred == 1);
2406 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2407 BOOST_ASIO_CHECK(!error);
2408
2409 s.reset(read_data, sizeof(read_data));
2410 s.next_read_length(10);
2411 memset(read_buf, 0, sizeof(read_buf));
2412 error = boost::system::error_code();
2413 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2414 boost::asio::transfer_at_least(1), error);
2415 BOOST_ASIO_CHECK(bytes_transferred == 10);
2416 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2417 BOOST_ASIO_CHECK(!error);
2418
2419 s.reset(read_data, sizeof(read_data));
2420 s.next_read_length(10);
2421 memset(read_buf, 0, sizeof(read_buf));
2422 error = boost::system::error_code();
2423 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2424 boost::asio::transfer_at_least(1), error);
2425 BOOST_ASIO_CHECK(bytes_transferred == 10);
2426 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2427 BOOST_ASIO_CHECK(!error);
2428
2429 s.reset(read_data, sizeof(read_data));
2430 memset(read_buf, 0, sizeof(read_buf));
2431 error = boost::system::error_code();
2432 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2433 boost::asio::transfer_at_least(10), error);
2434 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2435 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2436 BOOST_ASIO_CHECK(!error);
2437
2438 s.reset(read_data, sizeof(read_data));
2439 memset(read_buf, 0, sizeof(read_buf));
2440 error = boost::system::error_code();
2441 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2442 boost::asio::transfer_at_least(10), error);
2443 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2444 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2445 BOOST_ASIO_CHECK(!error);
2446
2447 s.reset(read_data, sizeof(read_data));
2448 s.next_read_length(1);
2449 memset(read_buf, 0, sizeof(read_buf));
2450 error = boost::system::error_code();
2451 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2452 boost::asio::transfer_at_least(10), error);
2453 BOOST_ASIO_CHECK(bytes_transferred == 10);
2454 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2455 BOOST_ASIO_CHECK(!error);
2456
2457 s.reset(read_data, sizeof(read_data));
2458 s.next_read_length(1);
2459 memset(read_buf, 0, sizeof(read_buf));
2460 error = boost::system::error_code();
2461 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2462 boost::asio::transfer_at_least(10), error);
2463 BOOST_ASIO_CHECK(bytes_transferred == 10);
2464 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2465 BOOST_ASIO_CHECK(!error);
2466
2467 s.reset(read_data, sizeof(read_data));
2468 s.next_read_length(10);
2469 memset(read_buf, 0, sizeof(read_buf));
2470 error = boost::system::error_code();
2471 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2472 boost::asio::transfer_at_least(10), error);
2473 BOOST_ASIO_CHECK(bytes_transferred == 10);
2474 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2475 BOOST_ASIO_CHECK(!error);
2476
2477 s.reset(read_data, sizeof(read_data));
2478 s.next_read_length(10);
2479 memset(read_buf, 0, sizeof(read_buf));
2480 error = boost::system::error_code();
2481 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2482 boost::asio::transfer_at_least(10), error);
2483 BOOST_ASIO_CHECK(bytes_transferred == 10);
2484 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2485 BOOST_ASIO_CHECK(!error);
2486
2487 s.reset(read_data, sizeof(read_data));
2488 memset(read_buf, 0, sizeof(read_buf));
2489 error = boost::system::error_code();
2490 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2491 boost::asio::transfer_at_least(42), error);
2492 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2493 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2494 BOOST_ASIO_CHECK(!error);
2495
2496 s.reset(read_data, sizeof(read_data));
2497 memset(read_buf, 0, sizeof(read_buf));
2498 error = boost::system::error_code();
2499 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2500 boost::asio::transfer_at_least(42), error);
2501 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2502 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2503 BOOST_ASIO_CHECK(!error);
2504
2505 s.reset(read_data, sizeof(read_data));
2506 s.next_read_length(1);
2507 memset(read_buf, 0, sizeof(read_buf));
2508 error = boost::system::error_code();
2509 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2510 boost::asio::transfer_at_least(42), error);
2511 BOOST_ASIO_CHECK(bytes_transferred == 42);
2512 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2513 BOOST_ASIO_CHECK(!error);
2514
2515 s.reset(read_data, sizeof(read_data));
2516 s.next_read_length(1);
2517 memset(read_buf, 0, sizeof(read_buf));
2518 error = boost::system::error_code();
2519 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2520 boost::asio::transfer_at_least(42), error);
2521 BOOST_ASIO_CHECK(bytes_transferred == 42);
2522 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2523 BOOST_ASIO_CHECK(!error);
2524
2525 s.reset(read_data, sizeof(read_data));
2526 s.next_read_length(10);
2527 memset(read_buf, 0, sizeof(read_buf));
2528 error = boost::system::error_code();
2529 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2530 boost::asio::transfer_at_least(42), error);
2531 BOOST_ASIO_CHECK(bytes_transferred == 50);
2532 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
2533 BOOST_ASIO_CHECK(!error);
2534
2535 s.reset(read_data, sizeof(read_data));
2536 s.next_read_length(10);
2537 memset(read_buf, 0, sizeof(read_buf));
2538 error = boost::system::error_code();
2539 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2540 boost::asio::transfer_at_least(42), error);
2541 BOOST_ASIO_CHECK(bytes_transferred == 50);
2542 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
2543 BOOST_ASIO_CHECK(!error);
2544
2545 s.reset(read_data, sizeof(read_data));
2546 memset(read_buf, 0, sizeof(read_buf));
2547 error = boost::system::error_code();
2548 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2549 boost::asio::transfer_exactly(1), error);
2550 BOOST_ASIO_CHECK(bytes_transferred == 1);
2551 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2552 BOOST_ASIO_CHECK(!error);
2553
2554 s.reset(read_data, sizeof(read_data));
2555 memset(read_buf, 0, sizeof(read_buf));
2556 error = boost::system::error_code();
2557 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2558 boost::asio::transfer_exactly(1), error);
2559 BOOST_ASIO_CHECK(bytes_transferred == 1);
2560 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2561 BOOST_ASIO_CHECK(!error);
2562
2563 s.reset(read_data, sizeof(read_data));
2564 s.next_read_length(1);
2565 memset(read_buf, 0, sizeof(read_buf));
2566 error = boost::system::error_code();
2567 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2568 boost::asio::transfer_exactly(1), error);
2569 BOOST_ASIO_CHECK(bytes_transferred == 1);
2570 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2571 BOOST_ASIO_CHECK(!error);
2572
2573 s.reset(read_data, sizeof(read_data));
2574 s.next_read_length(1);
2575 memset(read_buf, 0, sizeof(read_buf));
2576 error = boost::system::error_code();
2577 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2578 boost::asio::transfer_exactly(1), error);
2579 BOOST_ASIO_CHECK(bytes_transferred == 1);
2580 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2581 BOOST_ASIO_CHECK(!error);
2582
2583 s.reset(read_data, sizeof(read_data));
2584 s.next_read_length(10);
2585 memset(read_buf, 0, sizeof(read_buf));
2586 error = boost::system::error_code();
2587 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2588 boost::asio::transfer_exactly(1), error);
2589 BOOST_ASIO_CHECK(bytes_transferred == 1);
2590 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
2591 BOOST_ASIO_CHECK(!error);
2592
2593 s.reset(read_data, sizeof(read_data));
2594 s.next_read_length(10);
2595 memset(read_buf, 0, sizeof(read_buf));
2596 error = boost::system::error_code();
2597 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2598 boost::asio::transfer_exactly(1), error);
2599 BOOST_ASIO_CHECK(bytes_transferred == 1);
2600 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
2601 BOOST_ASIO_CHECK(!error);
2602
2603 s.reset(read_data, sizeof(read_data));
2604 memset(read_buf, 0, sizeof(read_buf));
2605 error = boost::system::error_code();
2606 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2607 boost::asio::transfer_exactly(10), error);
2608 BOOST_ASIO_CHECK(bytes_transferred == 10);
2609 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2610 BOOST_ASIO_CHECK(!error);
2611
2612 s.reset(read_data, sizeof(read_data));
2613 memset(read_buf, 0, sizeof(read_buf));
2614 error = boost::system::error_code();
2615 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2616 boost::asio::transfer_exactly(10), error);
2617 BOOST_ASIO_CHECK(bytes_transferred == 10);
2618 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2619 BOOST_ASIO_CHECK(!error);
2620
2621 s.reset(read_data, sizeof(read_data));
2622 s.next_read_length(1);
2623 memset(read_buf, 0, sizeof(read_buf));
2624 error = boost::system::error_code();
2625 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2626 boost::asio::transfer_exactly(10), error);
2627 BOOST_ASIO_CHECK(bytes_transferred == 10);
2628 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2629 BOOST_ASIO_CHECK(!error);
2630
2631 s.reset(read_data, sizeof(read_data));
2632 s.next_read_length(1);
2633 memset(read_buf, 0, sizeof(read_buf));
2634 error = boost::system::error_code();
2635 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2636 boost::asio::transfer_exactly(10), error);
2637 BOOST_ASIO_CHECK(bytes_transferred == 10);
2638 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2639 BOOST_ASIO_CHECK(!error);
2640
2641 s.reset(read_data, sizeof(read_data));
2642 s.next_read_length(10);
2643 memset(read_buf, 0, sizeof(read_buf));
2644 error = boost::system::error_code();
2645 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2646 boost::asio::transfer_exactly(10), error);
2647 BOOST_ASIO_CHECK(bytes_transferred == 10);
2648 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
2649 BOOST_ASIO_CHECK(!error);
2650
2651 s.reset(read_data, sizeof(read_data));
2652 s.next_read_length(10);
2653 memset(read_buf, 0, sizeof(read_buf));
2654 error = boost::system::error_code();
2655 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2656 boost::asio::transfer_exactly(10), error);
2657 BOOST_ASIO_CHECK(bytes_transferred == 10);
2658 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
2659 BOOST_ASIO_CHECK(!error);
2660
2661 s.reset(read_data, sizeof(read_data));
2662 memset(read_buf, 0, sizeof(read_buf));
2663 error = boost::system::error_code();
2664 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2665 boost::asio::transfer_exactly(42), error);
2666 BOOST_ASIO_CHECK(bytes_transferred == 42);
2667 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2668 BOOST_ASIO_CHECK(!error);
2669
2670 s.reset(read_data, sizeof(read_data));
2671 memset(read_buf, 0, sizeof(read_buf));
2672 error = boost::system::error_code();
2673 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2674 boost::asio::transfer_exactly(42), error);
2675 BOOST_ASIO_CHECK(bytes_transferred == 42);
2676 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2677 BOOST_ASIO_CHECK(!error);
2678
2679 s.reset(read_data, sizeof(read_data));
2680 s.next_read_length(1);
2681 memset(read_buf, 0, sizeof(read_buf));
2682 error = boost::system::error_code();
2683 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2684 boost::asio::transfer_exactly(42), error);
2685 BOOST_ASIO_CHECK(bytes_transferred == 42);
2686 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2687 BOOST_ASIO_CHECK(!error);
2688
2689 s.reset(read_data, sizeof(read_data));
2690 s.next_read_length(1);
2691 memset(read_buf, 0, sizeof(read_buf));
2692 error = boost::system::error_code();
2693 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2694 boost::asio::transfer_exactly(42), error);
2695 BOOST_ASIO_CHECK(bytes_transferred == 42);
2696 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2697 BOOST_ASIO_CHECK(!error);
2698
2699 s.reset(read_data, sizeof(read_data));
2700 s.next_read_length(10);
2701 memset(read_buf, 0, sizeof(read_buf));
2702 error = boost::system::error_code();
2703 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2704 boost::asio::transfer_exactly(42), error);
2705 BOOST_ASIO_CHECK(bytes_transferred == 42);
2706 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
2707 BOOST_ASIO_CHECK(!error);
2708
2709 s.reset(read_data, sizeof(read_data));
2710 s.next_read_length(10);
2711 memset(read_buf, 0, sizeof(read_buf));
2712 error = boost::system::error_code();
2713 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2714 boost::asio::transfer_exactly(42), error);
2715 BOOST_ASIO_CHECK(bytes_transferred == 42);
2716 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
2717 BOOST_ASIO_CHECK(!error);
2718
2719 s.reset(read_data, sizeof(read_data));
2720 memset(read_buf, 0, sizeof(read_buf));
2721 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2722 old_style_transfer_all, error);
2723 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2724 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2725 BOOST_ASIO_CHECK(!error);
2726
2727 s.reset(read_data, sizeof(read_data));
2728 memset(read_buf, 0, sizeof(read_buf));
2729 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2730 old_style_transfer_all, error);
2731 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2732 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2733 BOOST_ASIO_CHECK(!error);
2734
2735 s.reset(read_data, sizeof(read_data));
2736 s.next_read_length(1);
2737 memset(read_buf, 0, sizeof(read_buf));
2738 error = boost::system::error_code();
2739 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2740 old_style_transfer_all, error);
2741 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2742 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2743 BOOST_ASIO_CHECK(!error);
2744
2745 s.reset(read_data, sizeof(read_data));
2746 s.next_read_length(1);
2747 memset(read_buf, 0, sizeof(read_buf));
2748 error = boost::system::error_code();
2749 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2750 old_style_transfer_all, error);
2751 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2752 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2753 BOOST_ASIO_CHECK(!error);
2754
2755 s.reset(read_data, sizeof(read_data));
2756 s.next_read_length(10);
2757 memset(read_buf, 0, sizeof(read_buf));
2758 error = boost::system::error_code();
2759 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2760 old_style_transfer_all, error);
2761 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2762 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2763 BOOST_ASIO_CHECK(!error);
2764
2765 s.reset(read_data, sizeof(read_data));
2766 s.next_read_length(10);
2767 memset(read_buf, 0, sizeof(read_buf));
2768 error = boost::system::error_code();
2769 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2770 old_style_transfer_all, error);
2771 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2772 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2773 BOOST_ASIO_CHECK(!error);
2774
2775 s.reset(read_data, sizeof(read_data));
2776 memset(read_buf, 0, sizeof(read_buf));
2777 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2778 short_transfer, error);
2779 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2780 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2781 BOOST_ASIO_CHECK(!error);
2782
2783 s.reset(read_data, sizeof(read_data));
2784 memset(read_buf, 0, sizeof(read_buf));
2785 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2786 short_transfer, error);
2787 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2788 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2789 BOOST_ASIO_CHECK(!error);
2790
2791 s.reset(read_data, sizeof(read_data));
2792 s.next_read_length(1);
2793 memset(read_buf, 0, sizeof(read_buf));
2794 error = boost::system::error_code();
2795 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2796 short_transfer, error);
2797 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2798 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2799 BOOST_ASIO_CHECK(!error);
2800
2801 s.reset(read_data, sizeof(read_data));
2802 s.next_read_length(1);
2803 memset(read_buf, 0, sizeof(read_buf));
2804 error = boost::system::error_code();
2805 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2806 short_transfer, error);
2807 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2808 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2809 BOOST_ASIO_CHECK(!error);
2810
2811 s.reset(read_data, sizeof(read_data));
2812 s.next_read_length(10);
2813 memset(read_buf, 0, sizeof(read_buf));
2814 error = boost::system::error_code();
2815 bytes_transferred = boost::asio::read_at(s, 0, buffers,
2816 short_transfer, error);
2817 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2818 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
2819 BOOST_ASIO_CHECK(!error);
2820
2821 s.reset(read_data, sizeof(read_data));
2822 s.next_read_length(10);
2823 memset(read_buf, 0, sizeof(read_buf));
2824 error = boost::system::error_code();
2825 bytes_transferred = boost::asio::read_at(s, 1234, buffers,
2826 short_transfer, error);
2827 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2828 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
2829 BOOST_ASIO_CHECK(!error);
2830 }
2831
test_5_arg_streambuf_read_at()2832 void test_5_arg_streambuf_read_at()
2833 {
2834 boost::asio::io_service ios;
2835 test_random_access_device s(ios);
2836 boost::asio::streambuf sb(sizeof(read_data));
2837
2838 s.reset(read_data, sizeof(read_data));
2839 sb.consume(sb.size());
2840 boost::system::error_code error;
2841 size_t bytes_transferred = boost::asio::read_at(s, 0, sb,
2842 boost::asio::transfer_all(), error);
2843 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2844 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2845 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2846 BOOST_ASIO_CHECK(!error);
2847
2848 s.reset(read_data, sizeof(read_data));
2849 sb.consume(sb.size());
2850 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2851 boost::asio::transfer_all(), error);
2852 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2853 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2854 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2855 BOOST_ASIO_CHECK(!error);
2856
2857 s.reset(read_data, sizeof(read_data));
2858 s.next_read_length(1);
2859 sb.consume(sb.size());
2860 error = boost::system::error_code();
2861 bytes_transferred = boost::asio::read_at(s, 0, sb,
2862 boost::asio::transfer_all(), error);
2863 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2864 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2865 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2866 BOOST_ASIO_CHECK(!error);
2867
2868 s.reset(read_data, sizeof(read_data));
2869 s.next_read_length(1);
2870 sb.consume(sb.size());
2871 error = boost::system::error_code();
2872 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2873 boost::asio::transfer_all(), error);
2874 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2875 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2876 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2877 BOOST_ASIO_CHECK(!error);
2878
2879 s.reset(read_data, sizeof(read_data));
2880 s.next_read_length(10);
2881 sb.consume(sb.size());
2882 error = boost::system::error_code();
2883 bytes_transferred = boost::asio::read_at(s, 0, sb,
2884 boost::asio::transfer_all(), error);
2885 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2886 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2887 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2888 BOOST_ASIO_CHECK(!error);
2889
2890 s.reset(read_data, sizeof(read_data));
2891 s.next_read_length(10);
2892 sb.consume(sb.size());
2893 error = boost::system::error_code();
2894 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2895 boost::asio::transfer_all(), error);
2896 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2897 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2898 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2899 BOOST_ASIO_CHECK(!error);
2900
2901 s.reset(read_data, sizeof(read_data));
2902 sb.consume(sb.size());
2903 error = boost::system::error_code();
2904 bytes_transferred = boost::asio::read_at(s, 0, sb,
2905 boost::asio::transfer_at_least(1), error);
2906 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2907 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2908 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2909 BOOST_ASIO_CHECK(!error);
2910
2911 s.reset(read_data, sizeof(read_data));
2912 sb.consume(sb.size());
2913 error = boost::system::error_code();
2914 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2915 boost::asio::transfer_at_least(1), error);
2916 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2917 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2918 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2919 BOOST_ASIO_CHECK(!error);
2920
2921 s.reset(read_data, sizeof(read_data));
2922 s.next_read_length(1);
2923 sb.consume(sb.size());
2924 error = boost::system::error_code();
2925 bytes_transferred = boost::asio::read_at(s, 0, sb,
2926 boost::asio::transfer_at_least(1), error);
2927 BOOST_ASIO_CHECK(bytes_transferred == 1);
2928 BOOST_ASIO_CHECK(sb.size() == 1);
2929 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
2930 BOOST_ASIO_CHECK(!error);
2931
2932 s.reset(read_data, sizeof(read_data));
2933 s.next_read_length(1);
2934 sb.consume(sb.size());
2935 error = boost::system::error_code();
2936 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2937 boost::asio::transfer_at_least(1), error);
2938 BOOST_ASIO_CHECK(bytes_transferred == 1);
2939 BOOST_ASIO_CHECK(sb.size() == 1);
2940 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
2941 BOOST_ASIO_CHECK(!error);
2942
2943 s.reset(read_data, sizeof(read_data));
2944 s.next_read_length(10);
2945 sb.consume(sb.size());
2946 error = boost::system::error_code();
2947 bytes_transferred = boost::asio::read_at(s, 0, sb,
2948 boost::asio::transfer_at_least(1), error);
2949 BOOST_ASIO_CHECK(bytes_transferred == 10);
2950 BOOST_ASIO_CHECK(sb.size() == 10);
2951 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
2952 BOOST_ASIO_CHECK(!error);
2953
2954 s.reset(read_data, sizeof(read_data));
2955 s.next_read_length(10);
2956 sb.consume(sb.size());
2957 error = boost::system::error_code();
2958 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2959 boost::asio::transfer_at_least(1), error);
2960 BOOST_ASIO_CHECK(bytes_transferred == 10);
2961 BOOST_ASIO_CHECK(sb.size() == 10);
2962 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
2963 BOOST_ASIO_CHECK(!error);
2964
2965 s.reset(read_data, sizeof(read_data));
2966 sb.consume(sb.size());
2967 error = boost::system::error_code();
2968 bytes_transferred = boost::asio::read_at(s, 0, sb,
2969 boost::asio::transfer_at_least(10), error);
2970 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2971 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2972 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
2973 BOOST_ASIO_CHECK(!error);
2974
2975 s.reset(read_data, sizeof(read_data));
2976 sb.consume(sb.size());
2977 error = boost::system::error_code();
2978 bytes_transferred = boost::asio::read_at(s, 1234, sb,
2979 boost::asio::transfer_at_least(10), error);
2980 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
2981 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
2982 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
2983 BOOST_ASIO_CHECK(!error);
2984
2985 s.reset(read_data, sizeof(read_data));
2986 s.next_read_length(1);
2987 sb.consume(sb.size());
2988 error = boost::system::error_code();
2989 bytes_transferred = boost::asio::read_at(s, 0, sb,
2990 boost::asio::transfer_at_least(10), error);
2991 BOOST_ASIO_CHECK(bytes_transferred == 10);
2992 BOOST_ASIO_CHECK(sb.size() == 10);
2993 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
2994 BOOST_ASIO_CHECK(!error);
2995
2996 s.reset(read_data, sizeof(read_data));
2997 s.next_read_length(1);
2998 sb.consume(sb.size());
2999 error = boost::system::error_code();
3000 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3001 boost::asio::transfer_at_least(10), error);
3002 BOOST_ASIO_CHECK(bytes_transferred == 10);
3003 BOOST_ASIO_CHECK(sb.size() == 10);
3004 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3005 BOOST_ASIO_CHECK(!error);
3006
3007 s.reset(read_data, sizeof(read_data));
3008 s.next_read_length(10);
3009 sb.consume(sb.size());
3010 error = boost::system::error_code();
3011 bytes_transferred = boost::asio::read_at(s, 0, sb,
3012 boost::asio::transfer_at_least(10), error);
3013 BOOST_ASIO_CHECK(bytes_transferred == 10);
3014 BOOST_ASIO_CHECK(sb.size() == 10);
3015 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3016 BOOST_ASIO_CHECK(!error);
3017
3018 s.reset(read_data, sizeof(read_data));
3019 s.next_read_length(10);
3020 sb.consume(sb.size());
3021 error = boost::system::error_code();
3022 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3023 boost::asio::transfer_at_least(10), error);
3024 BOOST_ASIO_CHECK(bytes_transferred == 10);
3025 BOOST_ASIO_CHECK(sb.size() == 10);
3026 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3027 BOOST_ASIO_CHECK(!error);
3028
3029 s.reset(read_data, sizeof(read_data));
3030 sb.consume(sb.size());
3031 error = boost::system::error_code();
3032 bytes_transferred = boost::asio::read_at(s, 0, sb,
3033 boost::asio::transfer_at_least(42), error);
3034 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3035 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3036 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3037 BOOST_ASIO_CHECK(!error);
3038
3039 s.reset(read_data, sizeof(read_data));
3040 sb.consume(sb.size());
3041 error = boost::system::error_code();
3042 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3043 boost::asio::transfer_at_least(42), error);
3044 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3045 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3046 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3047 BOOST_ASIO_CHECK(!error);
3048
3049 s.reset(read_data, sizeof(read_data));
3050 s.next_read_length(1);
3051 sb.consume(sb.size());
3052 error = boost::system::error_code();
3053 bytes_transferred = boost::asio::read_at(s, 0, sb,
3054 boost::asio::transfer_at_least(42), error);
3055 BOOST_ASIO_CHECK(bytes_transferred == 42);
3056 BOOST_ASIO_CHECK(sb.size() == 42);
3057 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
3058 BOOST_ASIO_CHECK(!error);
3059
3060 s.reset(read_data, sizeof(read_data));
3061 s.next_read_length(1);
3062 sb.consume(sb.size());
3063 error = boost::system::error_code();
3064 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3065 boost::asio::transfer_at_least(42), error);
3066 BOOST_ASIO_CHECK(bytes_transferred == 42);
3067 BOOST_ASIO_CHECK(sb.size() == 42);
3068 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
3069 BOOST_ASIO_CHECK(!error);
3070
3071 s.reset(read_data, sizeof(read_data));
3072 s.next_read_length(10);
3073 sb.consume(sb.size());
3074 error = boost::system::error_code();
3075 bytes_transferred = boost::asio::read_at(s, 0, sb,
3076 boost::asio::transfer_at_least(42), error);
3077 BOOST_ASIO_CHECK(bytes_transferred == 50);
3078 BOOST_ASIO_CHECK(sb.size() == 50);
3079 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 50));
3080 BOOST_ASIO_CHECK(!error);
3081
3082 s.reset(read_data, sizeof(read_data));
3083 s.next_read_length(10);
3084 sb.consume(sb.size());
3085 error = boost::system::error_code();
3086 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3087 boost::asio::transfer_at_least(42), error);
3088 BOOST_ASIO_CHECK(bytes_transferred == 50);
3089 BOOST_ASIO_CHECK(sb.size() == 50);
3090 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 50));
3091 BOOST_ASIO_CHECK(!error);
3092
3093 s.reset(read_data, sizeof(read_data));
3094 sb.consume(sb.size());
3095 error = boost::system::error_code();
3096 bytes_transferred = boost::asio::read_at(s, 0, sb,
3097 boost::asio::transfer_exactly(1), error);
3098 BOOST_ASIO_CHECK(bytes_transferred == 1);
3099 BOOST_ASIO_CHECK(sb.size() == 1);
3100 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
3101 BOOST_ASIO_CHECK(!error);
3102
3103 s.reset(read_data, sizeof(read_data));
3104 sb.consume(sb.size());
3105 error = boost::system::error_code();
3106 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3107 boost::asio::transfer_exactly(1), error);
3108 BOOST_ASIO_CHECK(bytes_transferred == 1);
3109 BOOST_ASIO_CHECK(sb.size() == 1);
3110 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
3111 BOOST_ASIO_CHECK(!error);
3112
3113 s.reset(read_data, sizeof(read_data));
3114 s.next_read_length(1);
3115 sb.consume(sb.size());
3116 error = boost::system::error_code();
3117 bytes_transferred = boost::asio::read_at(s, 0, sb,
3118 boost::asio::transfer_exactly(1), error);
3119 BOOST_ASIO_CHECK(bytes_transferred == 1);
3120 BOOST_ASIO_CHECK(sb.size() == 1);
3121 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
3122 BOOST_ASIO_CHECK(!error);
3123
3124 s.reset(read_data, sizeof(read_data));
3125 s.next_read_length(1);
3126 sb.consume(sb.size());
3127 error = boost::system::error_code();
3128 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3129 boost::asio::transfer_exactly(1), error);
3130 BOOST_ASIO_CHECK(bytes_transferred == 1);
3131 BOOST_ASIO_CHECK(sb.size() == 1);
3132 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
3133 BOOST_ASIO_CHECK(!error);
3134
3135 s.reset(read_data, sizeof(read_data));
3136 s.next_read_length(10);
3137 sb.consume(sb.size());
3138 error = boost::system::error_code();
3139 bytes_transferred = boost::asio::read_at(s, 0, sb,
3140 boost::asio::transfer_exactly(1), error);
3141 BOOST_ASIO_CHECK(bytes_transferred == 1);
3142 BOOST_ASIO_CHECK(sb.size() == 1);
3143 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
3144 BOOST_ASIO_CHECK(!error);
3145
3146 s.reset(read_data, sizeof(read_data));
3147 s.next_read_length(10);
3148 sb.consume(sb.size());
3149 error = boost::system::error_code();
3150 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3151 boost::asio::transfer_exactly(1), error);
3152 BOOST_ASIO_CHECK(bytes_transferred == 1);
3153 BOOST_ASIO_CHECK(sb.size() == 1);
3154 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
3155 BOOST_ASIO_CHECK(!error);
3156
3157 s.reset(read_data, sizeof(read_data));
3158 sb.consume(sb.size());
3159 error = boost::system::error_code();
3160 bytes_transferred = boost::asio::read_at(s, 0, sb,
3161 boost::asio::transfer_exactly(10), error);
3162 BOOST_ASIO_CHECK(bytes_transferred == 10);
3163 BOOST_ASIO_CHECK(sb.size() == 10);
3164 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3165 BOOST_ASIO_CHECK(!error);
3166
3167 s.reset(read_data, sizeof(read_data));
3168 sb.consume(sb.size());
3169 error = boost::system::error_code();
3170 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3171 boost::asio::transfer_exactly(10), error);
3172 BOOST_ASIO_CHECK(bytes_transferred == 10);
3173 BOOST_ASIO_CHECK(sb.size() == 10);
3174 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3175 BOOST_ASIO_CHECK(!error);
3176
3177 s.reset(read_data, sizeof(read_data));
3178 s.next_read_length(1);
3179 sb.consume(sb.size());
3180 error = boost::system::error_code();
3181 bytes_transferred = boost::asio::read_at(s, 0, sb,
3182 boost::asio::transfer_exactly(10), error);
3183 BOOST_ASIO_CHECK(bytes_transferred == 10);
3184 BOOST_ASIO_CHECK(sb.size() == 10);
3185 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3186 BOOST_ASIO_CHECK(!error);
3187
3188 s.reset(read_data, sizeof(read_data));
3189 s.next_read_length(1);
3190 sb.consume(sb.size());
3191 error = boost::system::error_code();
3192 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3193 boost::asio::transfer_exactly(10), error);
3194 BOOST_ASIO_CHECK(bytes_transferred == 10);
3195 BOOST_ASIO_CHECK(sb.size() == 10);
3196 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3197 BOOST_ASIO_CHECK(!error);
3198
3199 s.reset(read_data, sizeof(read_data));
3200 s.next_read_length(10);
3201 sb.consume(sb.size());
3202 error = boost::system::error_code();
3203 bytes_transferred = boost::asio::read_at(s, 0, sb,
3204 boost::asio::transfer_exactly(10), error);
3205 BOOST_ASIO_CHECK(bytes_transferred == 10);
3206 BOOST_ASIO_CHECK(sb.size() == 10);
3207 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
3208 BOOST_ASIO_CHECK(!error);
3209
3210 s.reset(read_data, sizeof(read_data));
3211 s.next_read_length(10);
3212 sb.consume(sb.size());
3213 error = boost::system::error_code();
3214 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3215 boost::asio::transfer_exactly(10), error);
3216 BOOST_ASIO_CHECK(bytes_transferred == 10);
3217 BOOST_ASIO_CHECK(sb.size() == 10);
3218 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
3219 BOOST_ASIO_CHECK(!error);
3220
3221 s.reset(read_data, sizeof(read_data));
3222 sb.consume(sb.size());
3223 error = boost::system::error_code();
3224 bytes_transferred = boost::asio::read_at(s, 0, sb,
3225 boost::asio::transfer_exactly(42), error);
3226 BOOST_ASIO_CHECK(bytes_transferred == 42);
3227 BOOST_ASIO_CHECK(sb.size() == 42);
3228 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
3229 BOOST_ASIO_CHECK(!error);
3230
3231 s.reset(read_data, sizeof(read_data));
3232 sb.consume(sb.size());
3233 error = boost::system::error_code();
3234 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3235 boost::asio::transfer_exactly(42), error);
3236 BOOST_ASIO_CHECK(bytes_transferred == 42);
3237 BOOST_ASIO_CHECK(sb.size() == 42);
3238 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
3239 BOOST_ASIO_CHECK(!error);
3240
3241 s.reset(read_data, sizeof(read_data));
3242 s.next_read_length(1);
3243 sb.consume(sb.size());
3244 error = boost::system::error_code();
3245 bytes_transferred = boost::asio::read_at(s, 0, sb,
3246 boost::asio::transfer_exactly(42), error);
3247 BOOST_ASIO_CHECK(bytes_transferred == 42);
3248 BOOST_ASIO_CHECK(sb.size() == 42);
3249 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
3250 BOOST_ASIO_CHECK(!error);
3251
3252 s.reset(read_data, sizeof(read_data));
3253 s.next_read_length(1);
3254 sb.consume(sb.size());
3255 error = boost::system::error_code();
3256 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3257 boost::asio::transfer_exactly(42), error);
3258 BOOST_ASIO_CHECK(bytes_transferred == 42);
3259 BOOST_ASIO_CHECK(sb.size() == 42);
3260 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
3261 BOOST_ASIO_CHECK(!error);
3262
3263 s.reset(read_data, sizeof(read_data));
3264 s.next_read_length(10);
3265 sb.consume(sb.size());
3266 error = boost::system::error_code();
3267 bytes_transferred = boost::asio::read_at(s, 0, sb,
3268 boost::asio::transfer_exactly(42), error);
3269 BOOST_ASIO_CHECK(bytes_transferred == 42);
3270 BOOST_ASIO_CHECK(sb.size() == 42);
3271 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
3272 BOOST_ASIO_CHECK(!error);
3273
3274 s.reset(read_data, sizeof(read_data));
3275 s.next_read_length(10);
3276 sb.consume(sb.size());
3277 error = boost::system::error_code();
3278 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3279 boost::asio::transfer_exactly(42), error);
3280 BOOST_ASIO_CHECK(bytes_transferred == 42);
3281 BOOST_ASIO_CHECK(sb.size() == 42);
3282 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
3283 BOOST_ASIO_CHECK(!error);
3284
3285 s.reset(read_data, sizeof(read_data));
3286 sb.consume(sb.size());
3287 bytes_transferred = boost::asio::read_at(s, 0, sb,
3288 old_style_transfer_all, error);
3289 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3290 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3291 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3292 BOOST_ASIO_CHECK(!error);
3293
3294 s.reset(read_data, sizeof(read_data));
3295 sb.consume(sb.size());
3296 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3297 old_style_transfer_all, error);
3298 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3299 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3300 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3301 BOOST_ASIO_CHECK(!error);
3302
3303 s.reset(read_data, sizeof(read_data));
3304 s.next_read_length(1);
3305 sb.consume(sb.size());
3306 error = boost::system::error_code();
3307 bytes_transferred = boost::asio::read_at(s, 0, sb,
3308 old_style_transfer_all, error);
3309 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3310 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3311 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3312 BOOST_ASIO_CHECK(!error);
3313
3314 s.reset(read_data, sizeof(read_data));
3315 s.next_read_length(1);
3316 sb.consume(sb.size());
3317 error = boost::system::error_code();
3318 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3319 old_style_transfer_all, error);
3320 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3321 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3322 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3323 BOOST_ASIO_CHECK(!error);
3324
3325 s.reset(read_data, sizeof(read_data));
3326 s.next_read_length(10);
3327 sb.consume(sb.size());
3328 error = boost::system::error_code();
3329 bytes_transferred = boost::asio::read_at(s, 0, sb,
3330 old_style_transfer_all, error);
3331 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3332 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3333 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3334 BOOST_ASIO_CHECK(!error);
3335
3336 s.reset(read_data, sizeof(read_data));
3337 s.next_read_length(10);
3338 sb.consume(sb.size());
3339 error = boost::system::error_code();
3340 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3341 old_style_transfer_all, error);
3342 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3343 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3344 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3345 BOOST_ASIO_CHECK(!error);
3346
3347 s.reset(read_data, sizeof(read_data));
3348 sb.consume(sb.size());
3349 bytes_transferred = boost::asio::read_at(s, 0, sb,
3350 short_transfer, error);
3351 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3352 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3353 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3354 BOOST_ASIO_CHECK(!error);
3355
3356 s.reset(read_data, sizeof(read_data));
3357 sb.consume(sb.size());
3358 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3359 short_transfer, error);
3360 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3361 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3362 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3363 BOOST_ASIO_CHECK(!error);
3364
3365 s.reset(read_data, sizeof(read_data));
3366 s.next_read_length(1);
3367 sb.consume(sb.size());
3368 error = boost::system::error_code();
3369 bytes_transferred = boost::asio::read_at(s, 0, sb,
3370 short_transfer, error);
3371 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3372 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3373 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3374 BOOST_ASIO_CHECK(!error);
3375
3376 s.reset(read_data, sizeof(read_data));
3377 s.next_read_length(1);
3378 sb.consume(sb.size());
3379 error = boost::system::error_code();
3380 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3381 short_transfer, error);
3382 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3383 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3384 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3385 BOOST_ASIO_CHECK(!error);
3386
3387 s.reset(read_data, sizeof(read_data));
3388 s.next_read_length(10);
3389 sb.consume(sb.size());
3390 error = boost::system::error_code();
3391 bytes_transferred = boost::asio::read_at(s, 0, sb,
3392 short_transfer, error);
3393 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3394 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3395 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3396 BOOST_ASIO_CHECK(!error);
3397
3398 s.reset(read_data, sizeof(read_data));
3399 s.next_read_length(10);
3400 sb.consume(sb.size());
3401 error = boost::system::error_code();
3402 bytes_transferred = boost::asio::read_at(s, 1234, sb,
3403 short_transfer, error);
3404 BOOST_ASIO_CHECK(bytes_transferred == sizeof(read_data));
3405 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3406 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3407 BOOST_ASIO_CHECK(!error);
3408 }
3409
async_read_handler(const boost::system::error_code & e,size_t bytes_transferred,size_t expected_bytes_transferred,bool * called)3410 void async_read_handler(const boost::system::error_code& e,
3411 size_t bytes_transferred, size_t expected_bytes_transferred, bool* called)
3412 {
3413 *called = true;
3414 BOOST_ASIO_CHECK(!e);
3415 BOOST_ASIO_CHECK(bytes_transferred == expected_bytes_transferred);
3416 }
3417
test_4_arg_mutable_buffers_1_async_read_at()3418 void test_4_arg_mutable_buffers_1_async_read_at()
3419 {
3420 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3421 namespace bindns = boost;
3422 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3423 namespace bindns = std;
3424 using std::placeholders::_1;
3425 using std::placeholders::_2;
3426 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3427
3428 boost::asio::io_service ios;
3429 test_random_access_device s(ios);
3430 char read_buf[sizeof(read_data)];
3431 boost::asio::mutable_buffers_1 buffers
3432 = boost::asio::buffer(read_buf, sizeof(read_buf));
3433
3434 s.reset(read_data, sizeof(read_data));
3435 memset(read_buf, 0, sizeof(read_buf));
3436 bool called = false;
3437 boost::asio::async_read_at(s, 0, buffers,
3438 bindns::bind(async_read_handler,
3439 _1, _2, sizeof(read_data), &called));
3440 ios.reset();
3441 ios.run();
3442 BOOST_ASIO_CHECK(called);
3443 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3444
3445 s.reset(read_data, sizeof(read_data));
3446 memset(read_buf, 0, sizeof(read_buf));
3447 called = false;
3448 boost::asio::async_read_at(s, 1234, buffers,
3449 bindns::bind(async_read_handler,
3450 _1, _2, sizeof(read_data), &called));
3451 ios.reset();
3452 ios.run();
3453 BOOST_ASIO_CHECK(called);
3454 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3455
3456 s.reset(read_data, sizeof(read_data));
3457 s.next_read_length(1);
3458 memset(read_buf, 0, sizeof(read_buf));
3459 called = false;
3460 boost::asio::async_read_at(s, 0, buffers,
3461 bindns::bind(async_read_handler,
3462 _1, _2, sizeof(read_data), &called));
3463 ios.reset();
3464 ios.run();
3465 BOOST_ASIO_CHECK(called);
3466 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3467
3468 s.reset(read_data, sizeof(read_data));
3469 s.next_read_length(1);
3470 memset(read_buf, 0, sizeof(read_buf));
3471 called = false;
3472 boost::asio::async_read_at(s, 1234, buffers,
3473 bindns::bind(async_read_handler,
3474 _1, _2, sizeof(read_data), &called));
3475 ios.reset();
3476 ios.run();
3477 BOOST_ASIO_CHECK(called);
3478 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3479
3480 s.reset(read_data, sizeof(read_data));
3481 s.next_read_length(10);
3482 memset(read_buf, 0, sizeof(read_buf));
3483 called = false;
3484 boost::asio::async_read_at(s, 0, buffers,
3485 bindns::bind(async_read_handler,
3486 _1, _2, sizeof(read_data), &called));
3487 ios.reset();
3488 ios.run();
3489 BOOST_ASIO_CHECK(called);
3490 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3491
3492 s.reset(read_data, sizeof(read_data));
3493 s.next_read_length(10);
3494 memset(read_buf, 0, sizeof(read_buf));
3495 called = false;
3496 boost::asio::async_read_at(s, 1234, buffers,
3497 bindns::bind(async_read_handler,
3498 _1, _2, sizeof(read_data), &called));
3499 ios.reset();
3500 ios.run();
3501 BOOST_ASIO_CHECK(called);
3502 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3503
3504 s.reset(read_data, sizeof(read_data));
3505 memset(read_buf, 0, sizeof(read_buf));
3506 int i = boost::asio::async_read_at(s, 1234, buffers,
3507 archetypes::lazy_handler());
3508 BOOST_ASIO_CHECK(i == 42);
3509 ios.reset();
3510 ios.run();
3511 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3512 }
3513
test_4_arg_boost_array_buffers_async_read_at()3514 void test_4_arg_boost_array_buffers_async_read_at()
3515 {
3516 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3517 namespace bindns = boost;
3518 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3519 namespace bindns = std;
3520 using std::placeholders::_1;
3521 using std::placeholders::_2;
3522 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3523
3524 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
3525 boost::asio::io_service ios;
3526 test_random_access_device s(ios);
3527 char read_buf[sizeof(read_data)];
3528 boost::array<boost::asio::mutable_buffer, 2> buffers = { {
3529 boost::asio::buffer(read_buf, 32),
3530 boost::asio::buffer(read_buf) + 32 } };
3531
3532 s.reset(read_data, sizeof(read_data));
3533 memset(read_buf, 0, sizeof(read_buf));
3534 bool called = false;
3535 boost::asio::async_read_at(s, 0, buffers,
3536 bindns::bind(async_read_handler,
3537 _1, _2, sizeof(read_data), &called));
3538 ios.reset();
3539 ios.run();
3540 BOOST_ASIO_CHECK(called);
3541 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3542
3543 s.reset(read_data, sizeof(read_data));
3544 memset(read_buf, 0, sizeof(read_buf));
3545 called = false;
3546 boost::asio::async_read_at(s, 1234, buffers,
3547 bindns::bind(async_read_handler,
3548 _1, _2, sizeof(read_data), &called));
3549 ios.reset();
3550 ios.run();
3551 BOOST_ASIO_CHECK(called);
3552 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3553
3554 s.reset(read_data, sizeof(read_data));
3555 s.next_read_length(1);
3556 memset(read_buf, 0, sizeof(read_buf));
3557 called = false;
3558 boost::asio::async_read_at(s, 0, buffers,
3559 bindns::bind(async_read_handler,
3560 _1, _2, sizeof(read_data), &called));
3561 ios.reset();
3562 ios.run();
3563 BOOST_ASIO_CHECK(called);
3564 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3565
3566 s.reset(read_data, sizeof(read_data));
3567 s.next_read_length(1);
3568 memset(read_buf, 0, sizeof(read_buf));
3569 called = false;
3570 boost::asio::async_read_at(s, 1234, buffers,
3571 bindns::bind(async_read_handler,
3572 _1, _2, sizeof(read_data), &called));
3573 ios.reset();
3574 ios.run();
3575 BOOST_ASIO_CHECK(called);
3576 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3577
3578 s.reset(read_data, sizeof(read_data));
3579 s.next_read_length(10);
3580 memset(read_buf, 0, sizeof(read_buf));
3581 called = false;
3582 boost::asio::async_read_at(s, 0, buffers,
3583 bindns::bind(async_read_handler,
3584 _1, _2, sizeof(read_data), &called));
3585 ios.reset();
3586 ios.run();
3587 BOOST_ASIO_CHECK(called);
3588 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3589
3590 s.reset(read_data, sizeof(read_data));
3591 s.next_read_length(10);
3592 memset(read_buf, 0, sizeof(read_buf));
3593 called = false;
3594 boost::asio::async_read_at(s, 1234, buffers,
3595 bindns::bind(async_read_handler,
3596 _1, _2, sizeof(read_data), &called));
3597 ios.reset();
3598 ios.run();
3599 BOOST_ASIO_CHECK(called);
3600 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3601
3602 s.reset(read_data, sizeof(read_data));
3603 memset(read_buf, 0, sizeof(read_buf));
3604 int i = boost::asio::async_read_at(s, 1234, buffers,
3605 archetypes::lazy_handler());
3606 BOOST_ASIO_CHECK(i == 42);
3607 ios.reset();
3608 ios.run();
3609 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3610 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
3611 }
3612
test_4_arg_std_array_buffers_async_read_at()3613 void test_4_arg_std_array_buffers_async_read_at()
3614 {
3615 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3616 namespace bindns = boost;
3617 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3618 namespace bindns = std;
3619 using std::placeholders::_1;
3620 using std::placeholders::_2;
3621 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3622
3623 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
3624 boost::asio::io_service ios;
3625 test_random_access_device s(ios);
3626 char read_buf[sizeof(read_data)];
3627 std::array<boost::asio::mutable_buffer, 2> buffers = { {
3628 boost::asio::buffer(read_buf, 32),
3629 boost::asio::buffer(read_buf) + 32 } };
3630
3631 s.reset(read_data, sizeof(read_data));
3632 memset(read_buf, 0, sizeof(read_buf));
3633 bool called = false;
3634 boost::asio::async_read_at(s, 0, buffers,
3635 bindns::bind(async_read_handler,
3636 _1, _2, sizeof(read_data), &called));
3637 ios.reset();
3638 ios.run();
3639 BOOST_ASIO_CHECK(called);
3640 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3641
3642 s.reset(read_data, sizeof(read_data));
3643 memset(read_buf, 0, sizeof(read_buf));
3644 called = false;
3645 boost::asio::async_read_at(s, 1234, buffers,
3646 bindns::bind(async_read_handler,
3647 _1, _2, sizeof(read_data), &called));
3648 ios.reset();
3649 ios.run();
3650 BOOST_ASIO_CHECK(called);
3651 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3652
3653 s.reset(read_data, sizeof(read_data));
3654 s.next_read_length(1);
3655 memset(read_buf, 0, sizeof(read_buf));
3656 called = false;
3657 boost::asio::async_read_at(s, 0, buffers,
3658 bindns::bind(async_read_handler,
3659 _1, _2, sizeof(read_data), &called));
3660 ios.reset();
3661 ios.run();
3662 BOOST_ASIO_CHECK(called);
3663 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3664
3665 s.reset(read_data, sizeof(read_data));
3666 s.next_read_length(1);
3667 memset(read_buf, 0, sizeof(read_buf));
3668 called = false;
3669 boost::asio::async_read_at(s, 1234, buffers,
3670 bindns::bind(async_read_handler,
3671 _1, _2, sizeof(read_data), &called));
3672 ios.reset();
3673 ios.run();
3674 BOOST_ASIO_CHECK(called);
3675 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3676
3677 s.reset(read_data, sizeof(read_data));
3678 s.next_read_length(10);
3679 memset(read_buf, 0, sizeof(read_buf));
3680 called = false;
3681 boost::asio::async_read_at(s, 0, buffers,
3682 bindns::bind(async_read_handler,
3683 _1, _2, sizeof(read_data), &called));
3684 ios.reset();
3685 ios.run();
3686 BOOST_ASIO_CHECK(called);
3687 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3688
3689 s.reset(read_data, sizeof(read_data));
3690 s.next_read_length(10);
3691 memset(read_buf, 0, sizeof(read_buf));
3692 called = false;
3693 boost::asio::async_read_at(s, 1234, buffers,
3694 bindns::bind(async_read_handler,
3695 _1, _2, sizeof(read_data), &called));
3696 ios.reset();
3697 ios.run();
3698 BOOST_ASIO_CHECK(called);
3699 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3700
3701 s.reset(read_data, sizeof(read_data));
3702 memset(read_buf, 0, sizeof(read_buf));
3703 int i = boost::asio::async_read_at(s, 1234, buffers,
3704 archetypes::lazy_handler());
3705 BOOST_ASIO_CHECK(i == 42);
3706 ios.reset();
3707 ios.run();
3708 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3709 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
3710 }
3711
test_4_arg_vector_buffers_async_read_at()3712 void test_4_arg_vector_buffers_async_read_at()
3713 {
3714 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3715 namespace bindns = boost;
3716 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3717 namespace bindns = std;
3718 using std::placeholders::_1;
3719 using std::placeholders::_2;
3720 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3721
3722 boost::asio::io_service ios;
3723 test_random_access_device s(ios);
3724 char read_buf[sizeof(read_data)];
3725 std::vector<boost::asio::mutable_buffer> buffers;
3726 buffers.push_back(boost::asio::buffer(read_buf, 32));
3727 buffers.push_back(boost::asio::buffer(read_buf) + 32);
3728
3729 s.reset(read_data, sizeof(read_data));
3730 memset(read_buf, 0, sizeof(read_buf));
3731 bool called = false;
3732 boost::asio::async_read_at(s, 0, buffers,
3733 bindns::bind(async_read_handler,
3734 _1, _2, sizeof(read_data), &called));
3735 ios.reset();
3736 ios.run();
3737 BOOST_ASIO_CHECK(called);
3738 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3739
3740 s.reset(read_data, sizeof(read_data));
3741 memset(read_buf, 0, sizeof(read_buf));
3742 called = false;
3743 boost::asio::async_read_at(s, 1234, buffers,
3744 bindns::bind(async_read_handler,
3745 _1, _2, sizeof(read_data), &called));
3746 ios.reset();
3747 ios.run();
3748 BOOST_ASIO_CHECK(called);
3749 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3750
3751 s.reset(read_data, sizeof(read_data));
3752 s.next_read_length(1);
3753 memset(read_buf, 0, sizeof(read_buf));
3754 called = false;
3755 boost::asio::async_read_at(s, 0, buffers,
3756 bindns::bind(async_read_handler,
3757 _1, _2, sizeof(read_data), &called));
3758 ios.reset();
3759 ios.run();
3760 BOOST_ASIO_CHECK(called);
3761 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3762
3763 s.reset(read_data, sizeof(read_data));
3764 s.next_read_length(1);
3765 memset(read_buf, 0, sizeof(read_buf));
3766 called = false;
3767 boost::asio::async_read_at(s, 1234, buffers,
3768 bindns::bind(async_read_handler,
3769 _1, _2, sizeof(read_data), &called));
3770 ios.reset();
3771 ios.run();
3772 BOOST_ASIO_CHECK(called);
3773 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3774
3775 s.reset(read_data, sizeof(read_data));
3776 s.next_read_length(10);
3777 memset(read_buf, 0, sizeof(read_buf));
3778 called = false;
3779 boost::asio::async_read_at(s, 0, buffers,
3780 bindns::bind(async_read_handler,
3781 _1, _2, sizeof(read_data), &called));
3782 ios.reset();
3783 ios.run();
3784 BOOST_ASIO_CHECK(called);
3785 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3786
3787 s.reset(read_data, sizeof(read_data));
3788 s.next_read_length(10);
3789 memset(read_buf, 0, sizeof(read_buf));
3790 called = false;
3791 boost::asio::async_read_at(s, 1234, buffers,
3792 bindns::bind(async_read_handler,
3793 _1, _2, sizeof(read_data), &called));
3794 ios.reset();
3795 ios.run();
3796 BOOST_ASIO_CHECK(called);
3797 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3798
3799 s.reset(read_data, sizeof(read_data));
3800 memset(read_buf, 0, sizeof(read_buf));
3801 int i = boost::asio::async_read_at(s, 1234, buffers,
3802 archetypes::lazy_handler());
3803 BOOST_ASIO_CHECK(i == 42);
3804 ios.reset();
3805 ios.run();
3806 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3807 }
3808
test_4_arg_streambuf_async_read_at()3809 void test_4_arg_streambuf_async_read_at()
3810 {
3811 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3812 namespace bindns = boost;
3813 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3814 namespace bindns = std;
3815 using std::placeholders::_1;
3816 using std::placeholders::_2;
3817 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3818
3819 boost::asio::io_service ios;
3820 test_random_access_device s(ios);
3821 boost::asio::streambuf sb(sizeof(read_data));
3822
3823 s.reset(read_data, sizeof(read_data));
3824 sb.consume(sb.size());
3825 bool called = false;
3826 boost::asio::async_read_at(s, 0, sb,
3827 bindns::bind(async_read_handler,
3828 _1, _2, sizeof(read_data), &called));
3829 ios.reset();
3830 ios.run();
3831 BOOST_ASIO_CHECK(called);
3832 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3833 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3834
3835 s.reset(read_data, sizeof(read_data));
3836 sb.consume(sb.size());
3837 called = false;
3838 boost::asio::async_read_at(s, 1234, sb,
3839 bindns::bind(async_read_handler,
3840 _1, _2, sizeof(read_data), &called));
3841 ios.reset();
3842 ios.run();
3843 BOOST_ASIO_CHECK(called);
3844 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3845 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3846
3847 s.reset(read_data, sizeof(read_data));
3848 s.next_read_length(1);
3849 sb.consume(sb.size());
3850 called = false;
3851 boost::asio::async_read_at(s, 0, sb,
3852 bindns::bind(async_read_handler,
3853 _1, _2, sizeof(read_data), &called));
3854 ios.reset();
3855 ios.run();
3856 BOOST_ASIO_CHECK(called);
3857 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3858 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3859
3860 s.reset(read_data, sizeof(read_data));
3861 s.next_read_length(1);
3862 sb.consume(sb.size());
3863 called = false;
3864 boost::asio::async_read_at(s, 1234, sb,
3865 bindns::bind(async_read_handler,
3866 _1, _2, sizeof(read_data), &called));
3867 ios.reset();
3868 ios.run();
3869 BOOST_ASIO_CHECK(called);
3870 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3871 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3872
3873 s.reset(read_data, sizeof(read_data));
3874 s.next_read_length(10);
3875 sb.consume(sb.size());
3876 called = false;
3877 boost::asio::async_read_at(s, 0, sb,
3878 bindns::bind(async_read_handler,
3879 _1, _2, sizeof(read_data), &called));
3880 ios.reset();
3881 ios.run();
3882 BOOST_ASIO_CHECK(called);
3883 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3884 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
3885
3886 s.reset(read_data, sizeof(read_data));
3887 s.next_read_length(10);
3888 sb.consume(sb.size());
3889 called = false;
3890 boost::asio::async_read_at(s, 1234, sb,
3891 bindns::bind(async_read_handler,
3892 _1, _2, sizeof(read_data), &called));
3893 ios.reset();
3894 ios.run();
3895 BOOST_ASIO_CHECK(called);
3896 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
3897 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3898
3899 s.reset(read_data, sizeof(read_data));
3900 sb.consume(sb.size());
3901 int i = boost::asio::async_read_at(s, 1234, sb,
3902 archetypes::lazy_handler());
3903 BOOST_ASIO_CHECK(i == 42);
3904 ios.reset();
3905 ios.run();
3906 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
3907 }
3908
test_5_arg_mutable_buffers_1_async_read_at()3909 void test_5_arg_mutable_buffers_1_async_read_at()
3910 {
3911 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
3912 namespace bindns = boost;
3913 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
3914 namespace bindns = std;
3915 using std::placeholders::_1;
3916 using std::placeholders::_2;
3917 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
3918
3919 boost::asio::io_service ios;
3920 test_random_access_device s(ios);
3921 char read_buf[sizeof(read_data)];
3922 boost::asio::mutable_buffers_1 buffers
3923 = boost::asio::buffer(read_buf, sizeof(read_buf));
3924
3925 s.reset(read_data, sizeof(read_data));
3926 memset(read_buf, 0, sizeof(read_buf));
3927 bool called = false;
3928 boost::asio::async_read_at(s, 0, buffers,
3929 boost::asio::transfer_all(),
3930 bindns::bind(async_read_handler,
3931 _1, _2, sizeof(read_data), &called));
3932 ios.reset();
3933 ios.run();
3934 BOOST_ASIO_CHECK(called);
3935 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3936
3937 s.reset(read_data, sizeof(read_data));
3938 memset(read_buf, 0, sizeof(read_buf));
3939 called = false;
3940 boost::asio::async_read_at(s, 1234, buffers,
3941 boost::asio::transfer_all(),
3942 bindns::bind(async_read_handler,
3943 _1, _2, sizeof(read_data), &called));
3944 ios.reset();
3945 ios.run();
3946 BOOST_ASIO_CHECK(called);
3947 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3948
3949 s.reset(read_data, sizeof(read_data));
3950 s.next_read_length(1);
3951 memset(read_buf, 0, sizeof(read_buf));
3952 called = false;
3953 boost::asio::async_read_at(s, 0, buffers,
3954 boost::asio::transfer_all(),
3955 bindns::bind(async_read_handler,
3956 _1, _2, sizeof(read_data), &called));
3957 ios.reset();
3958 ios.run();
3959 BOOST_ASIO_CHECK(called);
3960 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3961
3962 s.reset(read_data, sizeof(read_data));
3963 s.next_read_length(1);
3964 memset(read_buf, 0, sizeof(read_buf));
3965 called = false;
3966 boost::asio::async_read_at(s, 1234, buffers,
3967 boost::asio::transfer_all(),
3968 bindns::bind(async_read_handler,
3969 _1, _2, sizeof(read_data), &called));
3970 ios.reset();
3971 ios.run();
3972 BOOST_ASIO_CHECK(called);
3973 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
3974
3975 s.reset(read_data, sizeof(read_data));
3976 s.next_read_length(10);
3977 memset(read_buf, 0, sizeof(read_buf));
3978 called = false;
3979 boost::asio::async_read_at(s, 0, buffers,
3980 boost::asio::transfer_all(),
3981 bindns::bind(async_read_handler,
3982 _1, _2, sizeof(read_data), &called));
3983 ios.reset();
3984 ios.run();
3985 BOOST_ASIO_CHECK(called);
3986 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
3987
3988 s.reset(read_data, sizeof(read_data));
3989 s.next_read_length(10);
3990 memset(read_buf, 0, sizeof(read_buf));
3991 called = false;
3992 boost::asio::async_read_at(s, 1234, buffers,
3993 boost::asio::transfer_all(),
3994 bindns::bind(async_read_handler,
3995 _1, _2, sizeof(read_data), &called));
3996 ios.reset();
3997 ios.run();
3998 BOOST_ASIO_CHECK(called);
3999 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4000
4001 s.reset(read_data, sizeof(read_data));
4002 memset(read_buf, 0, sizeof(read_buf));
4003 called = false;
4004 boost::asio::async_read_at(s, 0, buffers,
4005 boost::asio::transfer_at_least(1),
4006 bindns::bind(async_read_handler,
4007 _1, _2, sizeof(read_data), &called));
4008 ios.reset();
4009 ios.run();
4010 BOOST_ASIO_CHECK(called);
4011 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4012
4013 s.reset(read_data, sizeof(read_data));
4014 memset(read_buf, 0, sizeof(read_buf));
4015 called = false;
4016 boost::asio::async_read_at(s, 1234, buffers,
4017 boost::asio::transfer_at_least(1),
4018 bindns::bind(async_read_handler,
4019 _1, _2, sizeof(read_data), &called));
4020 ios.reset();
4021 ios.run();
4022 BOOST_ASIO_CHECK(called);
4023 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4024
4025 s.reset(read_data, sizeof(read_data));
4026 s.next_read_length(1);
4027 memset(read_buf, 0, sizeof(read_buf));
4028 called = false;
4029 boost::asio::async_read_at(s, 0, buffers,
4030 boost::asio::transfer_at_least(1),
4031 bindns::bind(async_read_handler,
4032 _1, _2, 1, &called));
4033 ios.reset();
4034 ios.run();
4035 BOOST_ASIO_CHECK(called);
4036 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4037
4038 s.reset(read_data, sizeof(read_data));
4039 s.next_read_length(1);
4040 memset(read_buf, 0, sizeof(read_buf));
4041 called = false;
4042 boost::asio::async_read_at(s, 1234, buffers,
4043 boost::asio::transfer_at_least(1),
4044 bindns::bind(async_read_handler,
4045 _1, _2, 1, &called));
4046 ios.reset();
4047 ios.run();
4048 BOOST_ASIO_CHECK(called);
4049 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4050
4051 s.reset(read_data, sizeof(read_data));
4052 s.next_read_length(10);
4053 memset(read_buf, 0, sizeof(read_buf));
4054 called = false;
4055 boost::asio::async_read_at(s, 0, buffers,
4056 boost::asio::transfer_at_least(1),
4057 bindns::bind(async_read_handler,
4058 _1, _2, 10, &called));
4059 ios.reset();
4060 ios.run();
4061 BOOST_ASIO_CHECK(called);
4062 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4063
4064 s.reset(read_data, sizeof(read_data));
4065 s.next_read_length(10);
4066 memset(read_buf, 0, sizeof(read_buf));
4067 called = false;
4068 boost::asio::async_read_at(s, 1234, buffers,
4069 boost::asio::transfer_at_least(1),
4070 bindns::bind(async_read_handler,
4071 _1, _2, 10, &called));
4072 ios.reset();
4073 ios.run();
4074 BOOST_ASIO_CHECK(called);
4075 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4076
4077 s.reset(read_data, sizeof(read_data));
4078 memset(read_buf, 0, sizeof(read_buf));
4079 called = false;
4080 boost::asio::async_read_at(s, 0, buffers,
4081 boost::asio::transfer_at_least(10),
4082 bindns::bind(async_read_handler,
4083 _1, _2, sizeof(read_data), &called));
4084 ios.reset();
4085 ios.run();
4086 BOOST_ASIO_CHECK(called);
4087 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4088
4089 s.reset(read_data, sizeof(read_data));
4090 memset(read_buf, 0, sizeof(read_buf));
4091 called = false;
4092 boost::asio::async_read_at(s, 1234, buffers,
4093 boost::asio::transfer_at_least(10),
4094 bindns::bind(async_read_handler,
4095 _1, _2, sizeof(read_data), &called));
4096 ios.reset();
4097 ios.run();
4098 BOOST_ASIO_CHECK(called);
4099 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4100
4101 s.reset(read_data, sizeof(read_data));
4102 s.next_read_length(1);
4103 memset(read_buf, 0, sizeof(read_buf));
4104 called = false;
4105 boost::asio::async_read_at(s, 0, buffers,
4106 boost::asio::transfer_at_least(10),
4107 bindns::bind(async_read_handler,
4108 _1, _2, 10, &called));
4109 ios.reset();
4110 ios.run();
4111 BOOST_ASIO_CHECK(called);
4112 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4113
4114 s.reset(read_data, sizeof(read_data));
4115 s.next_read_length(1);
4116 memset(read_buf, 0, sizeof(read_buf));
4117 called = false;
4118 boost::asio::async_read_at(s, 1234, buffers,
4119 boost::asio::transfer_at_least(10),
4120 bindns::bind(async_read_handler,
4121 _1, _2, 10, &called));
4122 ios.reset();
4123 ios.run();
4124 BOOST_ASIO_CHECK(called);
4125 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4126
4127 s.reset(read_data, sizeof(read_data));
4128 s.next_read_length(10);
4129 memset(read_buf, 0, sizeof(read_buf));
4130 called = false;
4131 boost::asio::async_read_at(s, 0, buffers,
4132 boost::asio::transfer_at_least(10),
4133 bindns::bind(async_read_handler,
4134 _1, _2, 10, &called));
4135 ios.reset();
4136 ios.run();
4137 BOOST_ASIO_CHECK(called);
4138 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4139
4140 s.reset(read_data, sizeof(read_data));
4141 s.next_read_length(10);
4142 memset(read_buf, 0, sizeof(read_buf));
4143 called = false;
4144 boost::asio::async_read_at(s, 1234, buffers,
4145 boost::asio::transfer_at_least(10),
4146 bindns::bind(async_read_handler,
4147 _1, _2, 10, &called));
4148 ios.reset();
4149 ios.run();
4150 BOOST_ASIO_CHECK(called);
4151 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4152
4153 s.reset(read_data, sizeof(read_data));
4154 memset(read_buf, 0, sizeof(read_buf));
4155 called = false;
4156 boost::asio::async_read_at(s, 0, buffers,
4157 boost::asio::transfer_at_least(42),
4158 bindns::bind(async_read_handler,
4159 _1, _2, sizeof(read_data), &called));
4160 ios.reset();
4161 ios.run();
4162 BOOST_ASIO_CHECK(called);
4163 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4164
4165 s.reset(read_data, sizeof(read_data));
4166 memset(read_buf, 0, sizeof(read_buf));
4167 called = false;
4168 boost::asio::async_read_at(s, 1234, buffers,
4169 boost::asio::transfer_at_least(42),
4170 bindns::bind(async_read_handler,
4171 _1, _2, sizeof(read_data), &called));
4172 ios.reset();
4173 ios.run();
4174 BOOST_ASIO_CHECK(called);
4175 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4176
4177 s.reset(read_data, sizeof(read_data));
4178 s.next_read_length(1);
4179 memset(read_buf, 0, sizeof(read_buf));
4180 called = false;
4181 boost::asio::async_read_at(s, 0, buffers,
4182 boost::asio::transfer_at_least(42),
4183 bindns::bind(async_read_handler,
4184 _1, _2, 42, &called));
4185 ios.reset();
4186 ios.run();
4187 BOOST_ASIO_CHECK(called);
4188 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4189
4190 s.reset(read_data, sizeof(read_data));
4191 s.next_read_length(1);
4192 memset(read_buf, 0, sizeof(read_buf));
4193 called = false;
4194 boost::asio::async_read_at(s, 1234, buffers,
4195 boost::asio::transfer_at_least(42),
4196 bindns::bind(async_read_handler,
4197 _1, _2, 42, &called));
4198 ios.reset();
4199 ios.run();
4200 BOOST_ASIO_CHECK(called);
4201 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4202
4203 s.reset(read_data, sizeof(read_data));
4204 s.next_read_length(10);
4205 memset(read_buf, 0, sizeof(read_buf));
4206 called = false;
4207 boost::asio::async_read_at(s, 0, buffers,
4208 boost::asio::transfer_at_least(42),
4209 bindns::bind(async_read_handler,
4210 _1, _2, 50, &called));
4211 ios.reset();
4212 ios.run();
4213 BOOST_ASIO_CHECK(called);
4214 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
4215
4216 s.reset(read_data, sizeof(read_data));
4217 s.next_read_length(10);
4218 memset(read_buf, 0, sizeof(read_buf));
4219 called = false;
4220 boost::asio::async_read_at(s, 1234, buffers,
4221 boost::asio::transfer_at_least(42),
4222 bindns::bind(async_read_handler,
4223 _1, _2, 50, &called));
4224 ios.reset();
4225 ios.run();
4226 BOOST_ASIO_CHECK(called);
4227 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
4228
4229 s.reset(read_data, sizeof(read_data));
4230 memset(read_buf, 0, sizeof(read_buf));
4231 called = false;
4232 boost::asio::async_read_at(s, 0, buffers,
4233 boost::asio::transfer_exactly(1),
4234 bindns::bind(async_read_handler,
4235 _1, _2, 1, &called));
4236 ios.reset();
4237 ios.run();
4238 BOOST_ASIO_CHECK(called);
4239 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4240
4241 s.reset(read_data, sizeof(read_data));
4242 memset(read_buf, 0, sizeof(read_buf));
4243 called = false;
4244 boost::asio::async_read_at(s, 1234, buffers,
4245 boost::asio::transfer_exactly(1),
4246 bindns::bind(async_read_handler,
4247 _1, _2, 1, &called));
4248 ios.reset();
4249 ios.run();
4250 BOOST_ASIO_CHECK(called);
4251 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4252
4253 s.reset(read_data, sizeof(read_data));
4254 s.next_read_length(1);
4255 memset(read_buf, 0, sizeof(read_buf));
4256 called = false;
4257 boost::asio::async_read_at(s, 0, buffers,
4258 boost::asio::transfer_exactly(1),
4259 bindns::bind(async_read_handler,
4260 _1, _2, 1, &called));
4261 ios.reset();
4262 ios.run();
4263 BOOST_ASIO_CHECK(called);
4264 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4265
4266 s.reset(read_data, sizeof(read_data));
4267 s.next_read_length(1);
4268 memset(read_buf, 0, sizeof(read_buf));
4269 called = false;
4270 boost::asio::async_read_at(s, 1234, buffers,
4271 boost::asio::transfer_exactly(1),
4272 bindns::bind(async_read_handler,
4273 _1, _2, 1, &called));
4274 ios.reset();
4275 ios.run();
4276 BOOST_ASIO_CHECK(called);
4277 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4278
4279 s.reset(read_data, sizeof(read_data));
4280 s.next_read_length(10);
4281 memset(read_buf, 0, sizeof(read_buf));
4282 called = false;
4283 boost::asio::async_read_at(s, 0, buffers,
4284 boost::asio::transfer_exactly(1),
4285 bindns::bind(async_read_handler,
4286 _1, _2, 1, &called));
4287 ios.reset();
4288 ios.run();
4289 BOOST_ASIO_CHECK(called);
4290 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4291
4292 s.reset(read_data, sizeof(read_data));
4293 s.next_read_length(10);
4294 memset(read_buf, 0, sizeof(read_buf));
4295 called = false;
4296 boost::asio::async_read_at(s, 1234, buffers,
4297 boost::asio::transfer_exactly(1),
4298 bindns::bind(async_read_handler,
4299 _1, _2, 1, &called));
4300 ios.reset();
4301 ios.run();
4302 BOOST_ASIO_CHECK(called);
4303 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4304
4305 s.reset(read_data, sizeof(read_data));
4306 memset(read_buf, 0, sizeof(read_buf));
4307 called = false;
4308 boost::asio::async_read_at(s, 0, buffers,
4309 boost::asio::transfer_exactly(10),
4310 bindns::bind(async_read_handler,
4311 _1, _2, 10, &called));
4312 ios.reset();
4313 ios.run();
4314 BOOST_ASIO_CHECK(called);
4315 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4316
4317 s.reset(read_data, sizeof(read_data));
4318 memset(read_buf, 0, sizeof(read_buf));
4319 called = false;
4320 boost::asio::async_read_at(s, 1234, buffers,
4321 boost::asio::transfer_exactly(10),
4322 bindns::bind(async_read_handler,
4323 _1, _2, 10, &called));
4324 ios.reset();
4325 ios.run();
4326 BOOST_ASIO_CHECK(called);
4327 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4328
4329 s.reset(read_data, sizeof(read_data));
4330 s.next_read_length(1);
4331 memset(read_buf, 0, sizeof(read_buf));
4332 called = false;
4333 boost::asio::async_read_at(s, 0, buffers,
4334 boost::asio::transfer_exactly(10),
4335 bindns::bind(async_read_handler,
4336 _1, _2, 10, &called));
4337 ios.reset();
4338 ios.run();
4339 BOOST_ASIO_CHECK(called);
4340 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4341
4342 s.reset(read_data, sizeof(read_data));
4343 s.next_read_length(1);
4344 memset(read_buf, 0, sizeof(read_buf));
4345 called = false;
4346 boost::asio::async_read_at(s, 1234, buffers,
4347 boost::asio::transfer_exactly(10),
4348 bindns::bind(async_read_handler,
4349 _1, _2, 10, &called));
4350 ios.reset();
4351 ios.run();
4352 BOOST_ASIO_CHECK(called);
4353 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4354
4355 s.reset(read_data, sizeof(read_data));
4356 s.next_read_length(10);
4357 memset(read_buf, 0, sizeof(read_buf));
4358 called = false;
4359 boost::asio::async_read_at(s, 0, buffers,
4360 boost::asio::transfer_exactly(10),
4361 bindns::bind(async_read_handler,
4362 _1, _2, 10, &called));
4363 ios.reset();
4364 ios.run();
4365 BOOST_ASIO_CHECK(called);
4366 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4367
4368 s.reset(read_data, sizeof(read_data));
4369 s.next_read_length(10);
4370 memset(read_buf, 0, sizeof(read_buf));
4371 called = false;
4372 boost::asio::async_read_at(s, 1234, buffers,
4373 boost::asio::transfer_exactly(10),
4374 bindns::bind(async_read_handler,
4375 _1, _2, 10, &called));
4376 ios.reset();
4377 ios.run();
4378 BOOST_ASIO_CHECK(called);
4379 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4380
4381 s.reset(read_data, sizeof(read_data));
4382 memset(read_buf, 0, sizeof(read_buf));
4383 called = false;
4384 boost::asio::async_read_at(s, 0, buffers,
4385 boost::asio::transfer_exactly(42),
4386 bindns::bind(async_read_handler,
4387 _1, _2, 42, &called));
4388 ios.reset();
4389 ios.run();
4390 BOOST_ASIO_CHECK(called);
4391 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4392
4393 s.reset(read_data, sizeof(read_data));
4394 memset(read_buf, 0, sizeof(read_buf));
4395 called = false;
4396 boost::asio::async_read_at(s, 1234, buffers,
4397 boost::asio::transfer_exactly(42),
4398 bindns::bind(async_read_handler,
4399 _1, _2, 42, &called));
4400 ios.reset();
4401 ios.run();
4402 BOOST_ASIO_CHECK(called);
4403 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4404
4405 s.reset(read_data, sizeof(read_data));
4406 s.next_read_length(1);
4407 memset(read_buf, 0, sizeof(read_buf));
4408 called = false;
4409 boost::asio::async_read_at(s, 0, buffers,
4410 boost::asio::transfer_exactly(42),
4411 bindns::bind(async_read_handler,
4412 _1, _2, 42, &called));
4413 ios.reset();
4414 ios.run();
4415 BOOST_ASIO_CHECK(called);
4416 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4417
4418 s.reset(read_data, sizeof(read_data));
4419 s.next_read_length(1);
4420 memset(read_buf, 0, sizeof(read_buf));
4421 called = false;
4422 boost::asio::async_read_at(s, 1234, buffers,
4423 boost::asio::transfer_exactly(42),
4424 bindns::bind(async_read_handler,
4425 _1, _2, 42, &called));
4426 ios.reset();
4427 ios.run();
4428 BOOST_ASIO_CHECK(called);
4429 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4430
4431 s.reset(read_data, sizeof(read_data));
4432 s.next_read_length(10);
4433 memset(read_buf, 0, sizeof(read_buf));
4434 called = false;
4435 boost::asio::async_read_at(s, 0, buffers,
4436 boost::asio::transfer_exactly(42),
4437 bindns::bind(async_read_handler,
4438 _1, _2, 42, &called));
4439 ios.reset();
4440 ios.run();
4441 BOOST_ASIO_CHECK(called);
4442 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4443
4444 s.reset(read_data, sizeof(read_data));
4445 s.next_read_length(10);
4446 memset(read_buf, 0, sizeof(read_buf));
4447 called = false;
4448 boost::asio::async_read_at(s, 1234, buffers,
4449 boost::asio::transfer_exactly(42),
4450 bindns::bind(async_read_handler,
4451 _1, _2, 42, &called));
4452 ios.reset();
4453 ios.run();
4454 BOOST_ASIO_CHECK(called);
4455 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4456
4457 s.reset(read_data, sizeof(read_data));
4458 memset(read_buf, 0, sizeof(read_buf));
4459 called = false;
4460 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
4461 bindns::bind(async_read_handler,
4462 _1, _2, sizeof(read_data), &called));
4463 ios.reset();
4464 ios.run();
4465 BOOST_ASIO_CHECK(called);
4466 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4467
4468 s.reset(read_data, sizeof(read_data));
4469 memset(read_buf, 0, sizeof(read_buf));
4470 called = false;
4471 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
4472 bindns::bind(async_read_handler,
4473 _1, _2, sizeof(read_data), &called));
4474 ios.reset();
4475 ios.run();
4476 BOOST_ASIO_CHECK(called);
4477 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4478
4479 s.reset(read_data, sizeof(read_data));
4480 s.next_read_length(1);
4481 memset(read_buf, 0, sizeof(read_buf));
4482 called = false;
4483 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
4484 bindns::bind(async_read_handler,
4485 _1, _2, sizeof(read_data), &called));
4486 ios.reset();
4487 ios.run();
4488 BOOST_ASIO_CHECK(called);
4489 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4490
4491 s.reset(read_data, sizeof(read_data));
4492 s.next_read_length(1);
4493 memset(read_buf, 0, sizeof(read_buf));
4494 called = false;
4495 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
4496 bindns::bind(async_read_handler,
4497 _1, _2, sizeof(read_data), &called));
4498 ios.reset();
4499 ios.run();
4500 BOOST_ASIO_CHECK(called);
4501 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4502
4503 s.reset(read_data, sizeof(read_data));
4504 s.next_read_length(10);
4505 memset(read_buf, 0, sizeof(read_buf));
4506 called = false;
4507 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
4508 bindns::bind(async_read_handler,
4509 _1, _2, sizeof(read_data), &called));
4510 ios.reset();
4511 ios.run();
4512 BOOST_ASIO_CHECK(called);
4513 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4514
4515 s.reset(read_data, sizeof(read_data));
4516 s.next_read_length(10);
4517 memset(read_buf, 0, sizeof(read_buf));
4518 called = false;
4519 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
4520 bindns::bind(async_read_handler,
4521 _1, _2, sizeof(read_data), &called));
4522 ios.reset();
4523 ios.run();
4524 BOOST_ASIO_CHECK(called);
4525 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4526
4527 s.reset(read_data, sizeof(read_data));
4528 memset(read_buf, 0, sizeof(read_buf));
4529 called = false;
4530 boost::asio::async_read_at(s, 0, buffers, short_transfer,
4531 bindns::bind(async_read_handler,
4532 _1, _2, sizeof(read_data), &called));
4533 ios.reset();
4534 ios.run();
4535 BOOST_ASIO_CHECK(called);
4536 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4537
4538 s.reset(read_data, sizeof(read_data));
4539 memset(read_buf, 0, sizeof(read_buf));
4540 called = false;
4541 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
4542 bindns::bind(async_read_handler,
4543 _1, _2, sizeof(read_data), &called));
4544 ios.reset();
4545 ios.run();
4546 BOOST_ASIO_CHECK(called);
4547 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4548
4549 s.reset(read_data, sizeof(read_data));
4550 s.next_read_length(1);
4551 memset(read_buf, 0, sizeof(read_buf));
4552 called = false;
4553 boost::asio::async_read_at(s, 0, buffers, short_transfer,
4554 bindns::bind(async_read_handler,
4555 _1, _2, sizeof(read_data), &called));
4556 ios.reset();
4557 ios.run();
4558 BOOST_ASIO_CHECK(called);
4559 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4560
4561 s.reset(read_data, sizeof(read_data));
4562 s.next_read_length(1);
4563 memset(read_buf, 0, sizeof(read_buf));
4564 called = false;
4565 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
4566 bindns::bind(async_read_handler,
4567 _1, _2, sizeof(read_data), &called));
4568 ios.reset();
4569 ios.run();
4570 BOOST_ASIO_CHECK(called);
4571 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4572
4573 s.reset(read_data, sizeof(read_data));
4574 s.next_read_length(10);
4575 memset(read_buf, 0, sizeof(read_buf));
4576 called = false;
4577 boost::asio::async_read_at(s, 0, buffers, short_transfer,
4578 bindns::bind(async_read_handler,
4579 _1, _2, sizeof(read_data), &called));
4580 ios.reset();
4581 ios.run();
4582 BOOST_ASIO_CHECK(called);
4583 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4584
4585 s.reset(read_data, sizeof(read_data));
4586 s.next_read_length(10);
4587 memset(read_buf, 0, sizeof(read_buf));
4588 called = false;
4589 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
4590 bindns::bind(async_read_handler,
4591 _1, _2, sizeof(read_data), &called));
4592 ios.reset();
4593 ios.run();
4594 BOOST_ASIO_CHECK(called);
4595 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4596
4597 s.reset(read_data, sizeof(read_data));
4598 memset(read_buf, 0, sizeof(read_buf));
4599 int i = boost::asio::async_read_at(s, 1234, buffers,
4600 short_transfer, archetypes::lazy_handler());
4601 BOOST_ASIO_CHECK(i == 42);
4602 ios.reset();
4603 ios.run();
4604 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4605 }
4606
test_5_arg_boost_array_buffers_async_read_at()4607 void test_5_arg_boost_array_buffers_async_read_at()
4608 {
4609 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
4610 namespace bindns = boost;
4611 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
4612 namespace bindns = std;
4613 using std::placeholders::_1;
4614 using std::placeholders::_2;
4615 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
4616
4617 #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
4618 boost::asio::io_service ios;
4619 test_random_access_device s(ios);
4620 char read_buf[sizeof(read_data)];
4621 boost::array<boost::asio::mutable_buffer, 2> buffers = { {
4622 boost::asio::buffer(read_buf, 32),
4623 boost::asio::buffer(read_buf) + 32 } };
4624
4625 s.reset(read_data, sizeof(read_data));
4626 memset(read_buf, 0, sizeof(read_buf));
4627 bool called = false;
4628 boost::asio::async_read_at(s, 0, buffers,
4629 boost::asio::transfer_all(),
4630 bindns::bind(async_read_handler,
4631 _1, _2, sizeof(read_data), &called));
4632 ios.reset();
4633 ios.run();
4634 BOOST_ASIO_CHECK(called);
4635 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4636
4637 s.reset(read_data, sizeof(read_data));
4638 memset(read_buf, 0, sizeof(read_buf));
4639 called = false;
4640 boost::asio::async_read_at(s, 1234, buffers,
4641 boost::asio::transfer_all(),
4642 bindns::bind(async_read_handler,
4643 _1, _2, sizeof(read_data), &called));
4644 ios.reset();
4645 ios.run();
4646 BOOST_ASIO_CHECK(called);
4647 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4648
4649 s.reset(read_data, sizeof(read_data));
4650 s.next_read_length(1);
4651 memset(read_buf, 0, sizeof(read_buf));
4652 called = false;
4653 boost::asio::async_read_at(s, 0, buffers,
4654 boost::asio::transfer_all(),
4655 bindns::bind(async_read_handler,
4656 _1, _2, sizeof(read_data), &called));
4657 ios.reset();
4658 ios.run();
4659 BOOST_ASIO_CHECK(called);
4660 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4661
4662 s.reset(read_data, sizeof(read_data));
4663 s.next_read_length(1);
4664 memset(read_buf, 0, sizeof(read_buf));
4665 called = false;
4666 boost::asio::async_read_at(s, 1234, buffers,
4667 boost::asio::transfer_all(),
4668 bindns::bind(async_read_handler,
4669 _1, _2, sizeof(read_data), &called));
4670 ios.reset();
4671 ios.run();
4672 BOOST_ASIO_CHECK(called);
4673 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4674
4675 s.reset(read_data, sizeof(read_data));
4676 s.next_read_length(10);
4677 memset(read_buf, 0, sizeof(read_buf));
4678 called = false;
4679 boost::asio::async_read_at(s, 0, buffers,
4680 boost::asio::transfer_all(),
4681 bindns::bind(async_read_handler,
4682 _1, _2, sizeof(read_data), &called));
4683 ios.reset();
4684 ios.run();
4685 BOOST_ASIO_CHECK(called);
4686 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4687
4688 s.reset(read_data, sizeof(read_data));
4689 s.next_read_length(10);
4690 memset(read_buf, 0, sizeof(read_buf));
4691 called = false;
4692 boost::asio::async_read_at(s, 1234, buffers,
4693 boost::asio::transfer_all(),
4694 bindns::bind(async_read_handler,
4695 _1, _2, sizeof(read_data), &called));
4696 ios.reset();
4697 ios.run();
4698 BOOST_ASIO_CHECK(called);
4699 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4700
4701 s.reset(read_data, sizeof(read_data));
4702 memset(read_buf, 0, sizeof(read_buf));
4703 called = false;
4704 boost::asio::async_read_at(s, 0, buffers,
4705 boost::asio::transfer_at_least(1),
4706 bindns::bind(async_read_handler,
4707 _1, _2, sizeof(read_data), &called));
4708 ios.reset();
4709 ios.run();
4710 BOOST_ASIO_CHECK(called);
4711 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4712
4713 s.reset(read_data, sizeof(read_data));
4714 memset(read_buf, 0, sizeof(read_buf));
4715 called = false;
4716 boost::asio::async_read_at(s, 1234, buffers,
4717 boost::asio::transfer_at_least(1),
4718 bindns::bind(async_read_handler,
4719 _1, _2, sizeof(read_data), &called));
4720 ios.reset();
4721 ios.run();
4722 BOOST_ASIO_CHECK(called);
4723 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4724
4725 s.reset(read_data, sizeof(read_data));
4726 s.next_read_length(1);
4727 memset(read_buf, 0, sizeof(read_buf));
4728 called = false;
4729 boost::asio::async_read_at(s, 0, buffers,
4730 boost::asio::transfer_at_least(1),
4731 bindns::bind(async_read_handler,
4732 _1, _2, 1, &called));
4733 ios.reset();
4734 ios.run();
4735 BOOST_ASIO_CHECK(called);
4736 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4737
4738 s.reset(read_data, sizeof(read_data));
4739 s.next_read_length(1);
4740 memset(read_buf, 0, sizeof(read_buf));
4741 called = false;
4742 boost::asio::async_read_at(s, 1234, buffers,
4743 boost::asio::transfer_at_least(1),
4744 bindns::bind(async_read_handler,
4745 _1, _2, 1, &called));
4746 ios.reset();
4747 ios.run();
4748 BOOST_ASIO_CHECK(called);
4749 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4750
4751 s.reset(read_data, sizeof(read_data));
4752 s.next_read_length(10);
4753 memset(read_buf, 0, sizeof(read_buf));
4754 called = false;
4755 boost::asio::async_read_at(s, 0, buffers,
4756 boost::asio::transfer_at_least(1),
4757 bindns::bind(async_read_handler,
4758 _1, _2, 10, &called));
4759 ios.reset();
4760 ios.run();
4761 BOOST_ASIO_CHECK(called);
4762 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4763
4764 s.reset(read_data, sizeof(read_data));
4765 s.next_read_length(10);
4766 memset(read_buf, 0, sizeof(read_buf));
4767 called = false;
4768 boost::asio::async_read_at(s, 1234, buffers,
4769 boost::asio::transfer_at_least(1),
4770 bindns::bind(async_read_handler,
4771 _1, _2, 10, &called));
4772 ios.reset();
4773 ios.run();
4774 BOOST_ASIO_CHECK(called);
4775 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4776
4777 s.reset(read_data, sizeof(read_data));
4778 memset(read_buf, 0, sizeof(read_buf));
4779 called = false;
4780 boost::asio::async_read_at(s, 0, buffers,
4781 boost::asio::transfer_at_least(10),
4782 bindns::bind(async_read_handler,
4783 _1, _2, sizeof(read_data), &called));
4784 ios.reset();
4785 ios.run();
4786 BOOST_ASIO_CHECK(called);
4787 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4788
4789 s.reset(read_data, sizeof(read_data));
4790 memset(read_buf, 0, sizeof(read_buf));
4791 called = false;
4792 boost::asio::async_read_at(s, 1234, buffers,
4793 boost::asio::transfer_at_least(10),
4794 bindns::bind(async_read_handler,
4795 _1, _2, sizeof(read_data), &called));
4796 ios.reset();
4797 ios.run();
4798 BOOST_ASIO_CHECK(called);
4799 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4800
4801 s.reset(read_data, sizeof(read_data));
4802 s.next_read_length(1);
4803 memset(read_buf, 0, sizeof(read_buf));
4804 called = false;
4805 boost::asio::async_read_at(s, 0, buffers,
4806 boost::asio::transfer_at_least(10),
4807 bindns::bind(async_read_handler,
4808 _1, _2, 10, &called));
4809 ios.reset();
4810 ios.run();
4811 BOOST_ASIO_CHECK(called);
4812 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4813
4814 s.reset(read_data, sizeof(read_data));
4815 s.next_read_length(1);
4816 memset(read_buf, 0, sizeof(read_buf));
4817 called = false;
4818 boost::asio::async_read_at(s, 1234, buffers,
4819 boost::asio::transfer_at_least(10),
4820 bindns::bind(async_read_handler,
4821 _1, _2, 10, &called));
4822 ios.reset();
4823 ios.run();
4824 BOOST_ASIO_CHECK(called);
4825 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4826
4827 s.reset(read_data, sizeof(read_data));
4828 s.next_read_length(10);
4829 memset(read_buf, 0, sizeof(read_buf));
4830 called = false;
4831 boost::asio::async_read_at(s, 0, buffers,
4832 boost::asio::transfer_at_least(10),
4833 bindns::bind(async_read_handler,
4834 _1, _2, 10, &called));
4835 ios.reset();
4836 ios.run();
4837 BOOST_ASIO_CHECK(called);
4838 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
4839
4840 s.reset(read_data, sizeof(read_data));
4841 s.next_read_length(10);
4842 memset(read_buf, 0, sizeof(read_buf));
4843 called = false;
4844 boost::asio::async_read_at(s, 1234, buffers,
4845 boost::asio::transfer_at_least(10),
4846 bindns::bind(async_read_handler,
4847 _1, _2, 10, &called));
4848 ios.reset();
4849 ios.run();
4850 BOOST_ASIO_CHECK(called);
4851 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
4852
4853 s.reset(read_data, sizeof(read_data));
4854 memset(read_buf, 0, sizeof(read_buf));
4855 called = false;
4856 boost::asio::async_read_at(s, 0, buffers,
4857 boost::asio::transfer_at_least(42),
4858 bindns::bind(async_read_handler,
4859 _1, _2, sizeof(read_data), &called));
4860 ios.reset();
4861 ios.run();
4862 BOOST_ASIO_CHECK(called);
4863 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
4864
4865 s.reset(read_data, sizeof(read_data));
4866 memset(read_buf, 0, sizeof(read_buf));
4867 called = false;
4868 boost::asio::async_read_at(s, 1234, buffers,
4869 boost::asio::transfer_at_least(42),
4870 bindns::bind(async_read_handler,
4871 _1, _2, sizeof(read_data), &called));
4872 ios.reset();
4873 ios.run();
4874 BOOST_ASIO_CHECK(called);
4875 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
4876
4877 s.reset(read_data, sizeof(read_data));
4878 s.next_read_length(1);
4879 memset(read_buf, 0, sizeof(read_buf));
4880 called = false;
4881 boost::asio::async_read_at(s, 0, buffers,
4882 boost::asio::transfer_at_least(42),
4883 bindns::bind(async_read_handler,
4884 _1, _2, 42, &called));
4885 ios.reset();
4886 ios.run();
4887 BOOST_ASIO_CHECK(called);
4888 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
4889
4890 s.reset(read_data, sizeof(read_data));
4891 s.next_read_length(1);
4892 memset(read_buf, 0, sizeof(read_buf));
4893 called = false;
4894 boost::asio::async_read_at(s, 1234, buffers,
4895 boost::asio::transfer_at_least(42),
4896 bindns::bind(async_read_handler,
4897 _1, _2, 42, &called));
4898 ios.reset();
4899 ios.run();
4900 BOOST_ASIO_CHECK(called);
4901 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
4902
4903 s.reset(read_data, sizeof(read_data));
4904 s.next_read_length(10);
4905 memset(read_buf, 0, sizeof(read_buf));
4906 called = false;
4907 boost::asio::async_read_at(s, 0, buffers,
4908 boost::asio::transfer_at_least(42),
4909 bindns::bind(async_read_handler,
4910 _1, _2, 50, &called));
4911 ios.reset();
4912 ios.run();
4913 BOOST_ASIO_CHECK(called);
4914 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
4915
4916 s.reset(read_data, sizeof(read_data));
4917 s.next_read_length(10);
4918 memset(read_buf, 0, sizeof(read_buf));
4919 called = false;
4920 boost::asio::async_read_at(s, 1234, buffers,
4921 boost::asio::transfer_at_least(42),
4922 bindns::bind(async_read_handler,
4923 _1, _2, 50, &called));
4924 ios.reset();
4925 ios.run();
4926 BOOST_ASIO_CHECK(called);
4927 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
4928
4929 s.reset(read_data, sizeof(read_data));
4930 memset(read_buf, 0, sizeof(read_buf));
4931 called = false;
4932 boost::asio::async_read_at(s, 0, buffers,
4933 boost::asio::transfer_exactly(1),
4934 bindns::bind(async_read_handler,
4935 _1, _2, 1, &called));
4936 ios.reset();
4937 ios.run();
4938 BOOST_ASIO_CHECK(called);
4939 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4940
4941 s.reset(read_data, sizeof(read_data));
4942 memset(read_buf, 0, sizeof(read_buf));
4943 called = false;
4944 boost::asio::async_read_at(s, 1234, buffers,
4945 boost::asio::transfer_exactly(1),
4946 bindns::bind(async_read_handler,
4947 _1, _2, 1, &called));
4948 ios.reset();
4949 ios.run();
4950 BOOST_ASIO_CHECK(called);
4951 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4952
4953 s.reset(read_data, sizeof(read_data));
4954 s.next_read_length(1);
4955 memset(read_buf, 0, sizeof(read_buf));
4956 called = false;
4957 boost::asio::async_read_at(s, 0, buffers,
4958 boost::asio::transfer_exactly(1),
4959 bindns::bind(async_read_handler,
4960 _1, _2, 1, &called));
4961 ios.reset();
4962 ios.run();
4963 BOOST_ASIO_CHECK(called);
4964 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4965
4966 s.reset(read_data, sizeof(read_data));
4967 s.next_read_length(1);
4968 memset(read_buf, 0, sizeof(read_buf));
4969 called = false;
4970 boost::asio::async_read_at(s, 1234, buffers,
4971 boost::asio::transfer_exactly(1),
4972 bindns::bind(async_read_handler,
4973 _1, _2, 1, &called));
4974 ios.reset();
4975 ios.run();
4976 BOOST_ASIO_CHECK(called);
4977 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
4978
4979 s.reset(read_data, sizeof(read_data));
4980 s.next_read_length(10);
4981 memset(read_buf, 0, sizeof(read_buf));
4982 called = false;
4983 boost::asio::async_read_at(s, 0, buffers,
4984 boost::asio::transfer_exactly(1),
4985 bindns::bind(async_read_handler,
4986 _1, _2, 1, &called));
4987 ios.reset();
4988 ios.run();
4989 BOOST_ASIO_CHECK(called);
4990 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
4991
4992 s.reset(read_data, sizeof(read_data));
4993 s.next_read_length(10);
4994 memset(read_buf, 0, sizeof(read_buf));
4995 called = false;
4996 boost::asio::async_read_at(s, 1234, buffers,
4997 boost::asio::transfer_exactly(1),
4998 bindns::bind(async_read_handler,
4999 _1, _2, 1, &called));
5000 ios.reset();
5001 ios.run();
5002 BOOST_ASIO_CHECK(called);
5003 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5004
5005 s.reset(read_data, sizeof(read_data));
5006 memset(read_buf, 0, sizeof(read_buf));
5007 called = false;
5008 boost::asio::async_read_at(s, 0, buffers,
5009 boost::asio::transfer_exactly(10),
5010 bindns::bind(async_read_handler,
5011 _1, _2, 10, &called));
5012 ios.reset();
5013 ios.run();
5014 BOOST_ASIO_CHECK(called);
5015 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5016
5017 s.reset(read_data, sizeof(read_data));
5018 memset(read_buf, 0, sizeof(read_buf));
5019 called = false;
5020 boost::asio::async_read_at(s, 1234, buffers,
5021 boost::asio::transfer_exactly(10),
5022 bindns::bind(async_read_handler,
5023 _1, _2, 10, &called));
5024 ios.reset();
5025 ios.run();
5026 BOOST_ASIO_CHECK(called);
5027 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5028
5029 s.reset(read_data, sizeof(read_data));
5030 s.next_read_length(1);
5031 memset(read_buf, 0, sizeof(read_buf));
5032 called = false;
5033 boost::asio::async_read_at(s, 0, buffers,
5034 boost::asio::transfer_exactly(10),
5035 bindns::bind(async_read_handler,
5036 _1, _2, 10, &called));
5037 ios.reset();
5038 ios.run();
5039 BOOST_ASIO_CHECK(called);
5040 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5041
5042 s.reset(read_data, sizeof(read_data));
5043 s.next_read_length(1);
5044 memset(read_buf, 0, sizeof(read_buf));
5045 called = false;
5046 boost::asio::async_read_at(s, 1234, buffers,
5047 boost::asio::transfer_exactly(10),
5048 bindns::bind(async_read_handler,
5049 _1, _2, 10, &called));
5050 ios.reset();
5051 ios.run();
5052 BOOST_ASIO_CHECK(called);
5053 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5054
5055 s.reset(read_data, sizeof(read_data));
5056 s.next_read_length(10);
5057 memset(read_buf, 0, sizeof(read_buf));
5058 called = false;
5059 boost::asio::async_read_at(s, 0, buffers,
5060 boost::asio::transfer_exactly(10),
5061 bindns::bind(async_read_handler,
5062 _1, _2, 10, &called));
5063 ios.reset();
5064 ios.run();
5065 BOOST_ASIO_CHECK(called);
5066 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5067
5068 s.reset(read_data, sizeof(read_data));
5069 s.next_read_length(10);
5070 memset(read_buf, 0, sizeof(read_buf));
5071 called = false;
5072 boost::asio::async_read_at(s, 1234, buffers,
5073 boost::asio::transfer_exactly(10),
5074 bindns::bind(async_read_handler,
5075 _1, _2, 10, &called));
5076 ios.reset();
5077 ios.run();
5078 BOOST_ASIO_CHECK(called);
5079 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5080
5081 s.reset(read_data, sizeof(read_data));
5082 memset(read_buf, 0, sizeof(read_buf));
5083 called = false;
5084 boost::asio::async_read_at(s, 0, buffers,
5085 boost::asio::transfer_exactly(42),
5086 bindns::bind(async_read_handler,
5087 _1, _2, 42, &called));
5088 ios.reset();
5089 ios.run();
5090 BOOST_ASIO_CHECK(called);
5091 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5092
5093 s.reset(read_data, sizeof(read_data));
5094 memset(read_buf, 0, sizeof(read_buf));
5095 called = false;
5096 boost::asio::async_read_at(s, 1234, buffers,
5097 boost::asio::transfer_exactly(42),
5098 bindns::bind(async_read_handler,
5099 _1, _2, 42, &called));
5100 ios.reset();
5101 ios.run();
5102 BOOST_ASIO_CHECK(called);
5103 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5104
5105 s.reset(read_data, sizeof(read_data));
5106 s.next_read_length(1);
5107 memset(read_buf, 0, sizeof(read_buf));
5108 called = false;
5109 boost::asio::async_read_at(s, 0, buffers,
5110 boost::asio::transfer_exactly(42),
5111 bindns::bind(async_read_handler,
5112 _1, _2, 42, &called));
5113 ios.reset();
5114 ios.run();
5115 BOOST_ASIO_CHECK(called);
5116 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5117
5118 s.reset(read_data, sizeof(read_data));
5119 s.next_read_length(1);
5120 memset(read_buf, 0, sizeof(read_buf));
5121 called = false;
5122 boost::asio::async_read_at(s, 1234, buffers,
5123 boost::asio::transfer_exactly(42),
5124 bindns::bind(async_read_handler,
5125 _1, _2, 42, &called));
5126 ios.reset();
5127 ios.run();
5128 BOOST_ASIO_CHECK(called);
5129 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5130
5131 s.reset(read_data, sizeof(read_data));
5132 s.next_read_length(10);
5133 memset(read_buf, 0, sizeof(read_buf));
5134 called = false;
5135 boost::asio::async_read_at(s, 0, buffers,
5136 boost::asio::transfer_exactly(42),
5137 bindns::bind(async_read_handler,
5138 _1, _2, 42, &called));
5139 ios.reset();
5140 ios.run();
5141 BOOST_ASIO_CHECK(called);
5142 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5143
5144 s.reset(read_data, sizeof(read_data));
5145 s.next_read_length(10);
5146 memset(read_buf, 0, sizeof(read_buf));
5147 called = false;
5148 boost::asio::async_read_at(s, 1234, buffers,
5149 boost::asio::transfer_exactly(42),
5150 bindns::bind(async_read_handler,
5151 _1, _2, 42, &called));
5152 ios.reset();
5153 ios.run();
5154 BOOST_ASIO_CHECK(called);
5155 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5156
5157 s.reset(read_data, sizeof(read_data));
5158 memset(read_buf, 0, sizeof(read_buf));
5159 called = false;
5160 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5161 bindns::bind(async_read_handler,
5162 _1, _2, sizeof(read_data), &called));
5163 ios.reset();
5164 ios.run();
5165 BOOST_ASIO_CHECK(called);
5166 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5167
5168 s.reset(read_data, sizeof(read_data));
5169 memset(read_buf, 0, sizeof(read_buf));
5170 called = false;
5171 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5172 bindns::bind(async_read_handler,
5173 _1, _2, sizeof(read_data), &called));
5174 ios.reset();
5175 ios.run();
5176 BOOST_ASIO_CHECK(called);
5177 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5178
5179 s.reset(read_data, sizeof(read_data));
5180 s.next_read_length(1);
5181 memset(read_buf, 0, sizeof(read_buf));
5182 called = false;
5183 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5184 bindns::bind(async_read_handler,
5185 _1, _2, sizeof(read_data), &called));
5186 ios.reset();
5187 ios.run();
5188 BOOST_ASIO_CHECK(called);
5189 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5190
5191 s.reset(read_data, sizeof(read_data));
5192 s.next_read_length(1);
5193 memset(read_buf, 0, sizeof(read_buf));
5194 called = false;
5195 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5196 bindns::bind(async_read_handler,
5197 _1, _2, sizeof(read_data), &called));
5198 ios.reset();
5199 ios.run();
5200 BOOST_ASIO_CHECK(called);
5201 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5202
5203 s.reset(read_data, sizeof(read_data));
5204 s.next_read_length(10);
5205 memset(read_buf, 0, sizeof(read_buf));
5206 called = false;
5207 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5208 bindns::bind(async_read_handler,
5209 _1, _2, sizeof(read_data), &called));
5210 ios.reset();
5211 ios.run();
5212 BOOST_ASIO_CHECK(called);
5213 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5214
5215 s.reset(read_data, sizeof(read_data));
5216 s.next_read_length(10);
5217 memset(read_buf, 0, sizeof(read_buf));
5218 called = false;
5219 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5220 bindns::bind(async_read_handler,
5221 _1, _2, sizeof(read_data), &called));
5222 ios.reset();
5223 ios.run();
5224 BOOST_ASIO_CHECK(called);
5225 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5226
5227 s.reset(read_data, sizeof(read_data));
5228 memset(read_buf, 0, sizeof(read_buf));
5229 called = false;
5230 boost::asio::async_read_at(s, 0, buffers, short_transfer,
5231 bindns::bind(async_read_handler,
5232 _1, _2, sizeof(read_data), &called));
5233 ios.reset();
5234 ios.run();
5235 BOOST_ASIO_CHECK(called);
5236 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5237
5238 s.reset(read_data, sizeof(read_data));
5239 memset(read_buf, 0, sizeof(read_buf));
5240 called = false;
5241 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
5242 bindns::bind(async_read_handler,
5243 _1, _2, sizeof(read_data), &called));
5244 ios.reset();
5245 ios.run();
5246 BOOST_ASIO_CHECK(called);
5247 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5248
5249 s.reset(read_data, sizeof(read_data));
5250 s.next_read_length(1);
5251 memset(read_buf, 0, sizeof(read_buf));
5252 called = false;
5253 boost::asio::async_read_at(s, 0, buffers, short_transfer,
5254 bindns::bind(async_read_handler,
5255 _1, _2, sizeof(read_data), &called));
5256 ios.reset();
5257 ios.run();
5258 BOOST_ASIO_CHECK(called);
5259 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5260
5261 s.reset(read_data, sizeof(read_data));
5262 s.next_read_length(1);
5263 memset(read_buf, 0, sizeof(read_buf));
5264 called = false;
5265 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
5266 bindns::bind(async_read_handler,
5267 _1, _2, sizeof(read_data), &called));
5268 ios.reset();
5269 ios.run();
5270 BOOST_ASIO_CHECK(called);
5271 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5272
5273 s.reset(read_data, sizeof(read_data));
5274 s.next_read_length(10);
5275 memset(read_buf, 0, sizeof(read_buf));
5276 called = false;
5277 boost::asio::async_read_at(s, 0, buffers, short_transfer,
5278 bindns::bind(async_read_handler,
5279 _1, _2, sizeof(read_data), &called));
5280 ios.reset();
5281 ios.run();
5282 BOOST_ASIO_CHECK(called);
5283 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5284
5285 s.reset(read_data, sizeof(read_data));
5286 s.next_read_length(10);
5287 memset(read_buf, 0, sizeof(read_buf));
5288 called = false;
5289 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
5290 bindns::bind(async_read_handler,
5291 _1, _2, sizeof(read_data), &called));
5292 ios.reset();
5293 ios.run();
5294 BOOST_ASIO_CHECK(called);
5295 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5296
5297 s.reset(read_data, sizeof(read_data));
5298 memset(read_buf, 0, sizeof(read_buf));
5299 int i = boost::asio::async_read_at(s, 1234, buffers,
5300 short_transfer, archetypes::lazy_handler());
5301 BOOST_ASIO_CHECK(i == 42);
5302 ios.reset();
5303 ios.run();
5304 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5305 #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
5306 }
5307
test_5_arg_std_array_buffers_async_read_at()5308 void test_5_arg_std_array_buffers_async_read_at()
5309 {
5310 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
5311 namespace bindns = boost;
5312 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
5313 namespace bindns = std;
5314 using std::placeholders::_1;
5315 using std::placeholders::_2;
5316 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
5317
5318 #if defined(BOOST_ASIO_HAS_STD_ARRAY)
5319 boost::asio::io_service ios;
5320 test_random_access_device s(ios);
5321 char read_buf[sizeof(read_data)];
5322 std::array<boost::asio::mutable_buffer, 2> buffers = { {
5323 boost::asio::buffer(read_buf, 32),
5324 boost::asio::buffer(read_buf) + 32 } };
5325
5326 s.reset(read_data, sizeof(read_data));
5327 memset(read_buf, 0, sizeof(read_buf));
5328 bool called = false;
5329 boost::asio::async_read_at(s, 0, buffers,
5330 boost::asio::transfer_all(),
5331 bindns::bind(async_read_handler,
5332 _1, _2, sizeof(read_data), &called));
5333 ios.reset();
5334 ios.run();
5335 BOOST_ASIO_CHECK(called);
5336 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5337
5338 s.reset(read_data, sizeof(read_data));
5339 memset(read_buf, 0, sizeof(read_buf));
5340 called = false;
5341 boost::asio::async_read_at(s, 1234, buffers,
5342 boost::asio::transfer_all(),
5343 bindns::bind(async_read_handler,
5344 _1, _2, sizeof(read_data), &called));
5345 ios.reset();
5346 ios.run();
5347 BOOST_ASIO_CHECK(called);
5348 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5349
5350 s.reset(read_data, sizeof(read_data));
5351 s.next_read_length(1);
5352 memset(read_buf, 0, sizeof(read_buf));
5353 called = false;
5354 boost::asio::async_read_at(s, 0, buffers,
5355 boost::asio::transfer_all(),
5356 bindns::bind(async_read_handler,
5357 _1, _2, sizeof(read_data), &called));
5358 ios.reset();
5359 ios.run();
5360 BOOST_ASIO_CHECK(called);
5361 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5362
5363 s.reset(read_data, sizeof(read_data));
5364 s.next_read_length(1);
5365 memset(read_buf, 0, sizeof(read_buf));
5366 called = false;
5367 boost::asio::async_read_at(s, 1234, buffers,
5368 boost::asio::transfer_all(),
5369 bindns::bind(async_read_handler,
5370 _1, _2, sizeof(read_data), &called));
5371 ios.reset();
5372 ios.run();
5373 BOOST_ASIO_CHECK(called);
5374 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5375
5376 s.reset(read_data, sizeof(read_data));
5377 s.next_read_length(10);
5378 memset(read_buf, 0, sizeof(read_buf));
5379 called = false;
5380 boost::asio::async_read_at(s, 0, buffers,
5381 boost::asio::transfer_all(),
5382 bindns::bind(async_read_handler,
5383 _1, _2, sizeof(read_data), &called));
5384 ios.reset();
5385 ios.run();
5386 BOOST_ASIO_CHECK(called);
5387 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5388
5389 s.reset(read_data, sizeof(read_data));
5390 s.next_read_length(10);
5391 memset(read_buf, 0, sizeof(read_buf));
5392 called = false;
5393 boost::asio::async_read_at(s, 1234, buffers,
5394 boost::asio::transfer_all(),
5395 bindns::bind(async_read_handler,
5396 _1, _2, sizeof(read_data), &called));
5397 ios.reset();
5398 ios.run();
5399 BOOST_ASIO_CHECK(called);
5400 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5401
5402 s.reset(read_data, sizeof(read_data));
5403 memset(read_buf, 0, sizeof(read_buf));
5404 called = false;
5405 boost::asio::async_read_at(s, 0, buffers,
5406 boost::asio::transfer_at_least(1),
5407 bindns::bind(async_read_handler,
5408 _1, _2, sizeof(read_data), &called));
5409 ios.reset();
5410 ios.run();
5411 BOOST_ASIO_CHECK(called);
5412 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5413
5414 s.reset(read_data, sizeof(read_data));
5415 memset(read_buf, 0, sizeof(read_buf));
5416 called = false;
5417 boost::asio::async_read_at(s, 1234, buffers,
5418 boost::asio::transfer_at_least(1),
5419 bindns::bind(async_read_handler,
5420 _1, _2, sizeof(read_data), &called));
5421 ios.reset();
5422 ios.run();
5423 BOOST_ASIO_CHECK(called);
5424 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5425
5426 s.reset(read_data, sizeof(read_data));
5427 s.next_read_length(1);
5428 memset(read_buf, 0, sizeof(read_buf));
5429 called = false;
5430 boost::asio::async_read_at(s, 0, buffers,
5431 boost::asio::transfer_at_least(1),
5432 bindns::bind(async_read_handler,
5433 _1, _2, 1, &called));
5434 ios.reset();
5435 ios.run();
5436 BOOST_ASIO_CHECK(called);
5437 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5438
5439 s.reset(read_data, sizeof(read_data));
5440 s.next_read_length(1);
5441 memset(read_buf, 0, sizeof(read_buf));
5442 called = false;
5443 boost::asio::async_read_at(s, 1234, buffers,
5444 boost::asio::transfer_at_least(1),
5445 bindns::bind(async_read_handler,
5446 _1, _2, 1, &called));
5447 ios.reset();
5448 ios.run();
5449 BOOST_ASIO_CHECK(called);
5450 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5451
5452 s.reset(read_data, sizeof(read_data));
5453 s.next_read_length(10);
5454 memset(read_buf, 0, sizeof(read_buf));
5455 called = false;
5456 boost::asio::async_read_at(s, 0, buffers,
5457 boost::asio::transfer_at_least(1),
5458 bindns::bind(async_read_handler,
5459 _1, _2, 10, &called));
5460 ios.reset();
5461 ios.run();
5462 BOOST_ASIO_CHECK(called);
5463 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5464
5465 s.reset(read_data, sizeof(read_data));
5466 s.next_read_length(10);
5467 memset(read_buf, 0, sizeof(read_buf));
5468 called = false;
5469 boost::asio::async_read_at(s, 1234, buffers,
5470 boost::asio::transfer_at_least(1),
5471 bindns::bind(async_read_handler,
5472 _1, _2, 10, &called));
5473 ios.reset();
5474 ios.run();
5475 BOOST_ASIO_CHECK(called);
5476 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5477
5478 s.reset(read_data, sizeof(read_data));
5479 memset(read_buf, 0, sizeof(read_buf));
5480 called = false;
5481 boost::asio::async_read_at(s, 0, buffers,
5482 boost::asio::transfer_at_least(10),
5483 bindns::bind(async_read_handler,
5484 _1, _2, sizeof(read_data), &called));
5485 ios.reset();
5486 ios.run();
5487 BOOST_ASIO_CHECK(called);
5488 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5489
5490 s.reset(read_data, sizeof(read_data));
5491 memset(read_buf, 0, sizeof(read_buf));
5492 called = false;
5493 boost::asio::async_read_at(s, 1234, buffers,
5494 boost::asio::transfer_at_least(10),
5495 bindns::bind(async_read_handler,
5496 _1, _2, sizeof(read_data), &called));
5497 ios.reset();
5498 ios.run();
5499 BOOST_ASIO_CHECK(called);
5500 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5501
5502 s.reset(read_data, sizeof(read_data));
5503 s.next_read_length(1);
5504 memset(read_buf, 0, sizeof(read_buf));
5505 called = false;
5506 boost::asio::async_read_at(s, 0, buffers,
5507 boost::asio::transfer_at_least(10),
5508 bindns::bind(async_read_handler,
5509 _1, _2, 10, &called));
5510 ios.reset();
5511 ios.run();
5512 BOOST_ASIO_CHECK(called);
5513 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5514
5515 s.reset(read_data, sizeof(read_data));
5516 s.next_read_length(1);
5517 memset(read_buf, 0, sizeof(read_buf));
5518 called = false;
5519 boost::asio::async_read_at(s, 1234, buffers,
5520 boost::asio::transfer_at_least(10),
5521 bindns::bind(async_read_handler,
5522 _1, _2, 10, &called));
5523 ios.reset();
5524 ios.run();
5525 BOOST_ASIO_CHECK(called);
5526 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5527
5528 s.reset(read_data, sizeof(read_data));
5529 s.next_read_length(10);
5530 memset(read_buf, 0, sizeof(read_buf));
5531 called = false;
5532 boost::asio::async_read_at(s, 0, buffers,
5533 boost::asio::transfer_at_least(10),
5534 bindns::bind(async_read_handler,
5535 _1, _2, 10, &called));
5536 ios.reset();
5537 ios.run();
5538 BOOST_ASIO_CHECK(called);
5539 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5540
5541 s.reset(read_data, sizeof(read_data));
5542 s.next_read_length(10);
5543 memset(read_buf, 0, sizeof(read_buf));
5544 called = false;
5545 boost::asio::async_read_at(s, 1234, buffers,
5546 boost::asio::transfer_at_least(10),
5547 bindns::bind(async_read_handler,
5548 _1, _2, 10, &called));
5549 ios.reset();
5550 ios.run();
5551 BOOST_ASIO_CHECK(called);
5552 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5553
5554 s.reset(read_data, sizeof(read_data));
5555 memset(read_buf, 0, sizeof(read_buf));
5556 called = false;
5557 boost::asio::async_read_at(s, 0, buffers,
5558 boost::asio::transfer_at_least(42),
5559 bindns::bind(async_read_handler,
5560 _1, _2, sizeof(read_data), &called));
5561 ios.reset();
5562 ios.run();
5563 BOOST_ASIO_CHECK(called);
5564 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5565
5566 s.reset(read_data, sizeof(read_data));
5567 memset(read_buf, 0, sizeof(read_buf));
5568 called = false;
5569 boost::asio::async_read_at(s, 1234, buffers,
5570 boost::asio::transfer_at_least(42),
5571 bindns::bind(async_read_handler,
5572 _1, _2, sizeof(read_data), &called));
5573 ios.reset();
5574 ios.run();
5575 BOOST_ASIO_CHECK(called);
5576 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5577
5578 s.reset(read_data, sizeof(read_data));
5579 s.next_read_length(1);
5580 memset(read_buf, 0, sizeof(read_buf));
5581 called = false;
5582 boost::asio::async_read_at(s, 0, buffers,
5583 boost::asio::transfer_at_least(42),
5584 bindns::bind(async_read_handler,
5585 _1, _2, 42, &called));
5586 ios.reset();
5587 ios.run();
5588 BOOST_ASIO_CHECK(called);
5589 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5590
5591 s.reset(read_data, sizeof(read_data));
5592 s.next_read_length(1);
5593 memset(read_buf, 0, sizeof(read_buf));
5594 called = false;
5595 boost::asio::async_read_at(s, 1234, buffers,
5596 boost::asio::transfer_at_least(42),
5597 bindns::bind(async_read_handler,
5598 _1, _2, 42, &called));
5599 ios.reset();
5600 ios.run();
5601 BOOST_ASIO_CHECK(called);
5602 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5603
5604 s.reset(read_data, sizeof(read_data));
5605 s.next_read_length(10);
5606 memset(read_buf, 0, sizeof(read_buf));
5607 called = false;
5608 boost::asio::async_read_at(s, 0, buffers,
5609 boost::asio::transfer_at_least(42),
5610 bindns::bind(async_read_handler,
5611 _1, _2, 50, &called));
5612 ios.reset();
5613 ios.run();
5614 BOOST_ASIO_CHECK(called);
5615 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
5616
5617 s.reset(read_data, sizeof(read_data));
5618 s.next_read_length(10);
5619 memset(read_buf, 0, sizeof(read_buf));
5620 called = false;
5621 boost::asio::async_read_at(s, 1234, buffers,
5622 boost::asio::transfer_at_least(42),
5623 bindns::bind(async_read_handler,
5624 _1, _2, 50, &called));
5625 ios.reset();
5626 ios.run();
5627 BOOST_ASIO_CHECK(called);
5628 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
5629
5630 s.reset(read_data, sizeof(read_data));
5631 memset(read_buf, 0, sizeof(read_buf));
5632 called = false;
5633 boost::asio::async_read_at(s, 0, buffers,
5634 boost::asio::transfer_exactly(1),
5635 bindns::bind(async_read_handler,
5636 _1, _2, 1, &called));
5637 ios.reset();
5638 ios.run();
5639 BOOST_ASIO_CHECK(called);
5640 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5641
5642 s.reset(read_data, sizeof(read_data));
5643 memset(read_buf, 0, sizeof(read_buf));
5644 called = false;
5645 boost::asio::async_read_at(s, 1234, buffers,
5646 boost::asio::transfer_exactly(1),
5647 bindns::bind(async_read_handler,
5648 _1, _2, 1, &called));
5649 ios.reset();
5650 ios.run();
5651 BOOST_ASIO_CHECK(called);
5652 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5653
5654 s.reset(read_data, sizeof(read_data));
5655 s.next_read_length(1);
5656 memset(read_buf, 0, sizeof(read_buf));
5657 called = false;
5658 boost::asio::async_read_at(s, 0, buffers,
5659 boost::asio::transfer_exactly(1),
5660 bindns::bind(async_read_handler,
5661 _1, _2, 1, &called));
5662 ios.reset();
5663 ios.run();
5664 BOOST_ASIO_CHECK(called);
5665 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5666
5667 s.reset(read_data, sizeof(read_data));
5668 s.next_read_length(1);
5669 memset(read_buf, 0, sizeof(read_buf));
5670 called = false;
5671 boost::asio::async_read_at(s, 1234, buffers,
5672 boost::asio::transfer_exactly(1),
5673 bindns::bind(async_read_handler,
5674 _1, _2, 1, &called));
5675 ios.reset();
5676 ios.run();
5677 BOOST_ASIO_CHECK(called);
5678 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5679
5680 s.reset(read_data, sizeof(read_data));
5681 s.next_read_length(10);
5682 memset(read_buf, 0, sizeof(read_buf));
5683 called = false;
5684 boost::asio::async_read_at(s, 0, buffers,
5685 boost::asio::transfer_exactly(1),
5686 bindns::bind(async_read_handler,
5687 _1, _2, 1, &called));
5688 ios.reset();
5689 ios.run();
5690 BOOST_ASIO_CHECK(called);
5691 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
5692
5693 s.reset(read_data, sizeof(read_data));
5694 s.next_read_length(10);
5695 memset(read_buf, 0, sizeof(read_buf));
5696 called = false;
5697 boost::asio::async_read_at(s, 1234, buffers,
5698 boost::asio::transfer_exactly(1),
5699 bindns::bind(async_read_handler,
5700 _1, _2, 1, &called));
5701 ios.reset();
5702 ios.run();
5703 BOOST_ASIO_CHECK(called);
5704 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
5705
5706 s.reset(read_data, sizeof(read_data));
5707 memset(read_buf, 0, sizeof(read_buf));
5708 called = false;
5709 boost::asio::async_read_at(s, 0, buffers,
5710 boost::asio::transfer_exactly(10),
5711 bindns::bind(async_read_handler,
5712 _1, _2, 10, &called));
5713 ios.reset();
5714 ios.run();
5715 BOOST_ASIO_CHECK(called);
5716 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5717
5718 s.reset(read_data, sizeof(read_data));
5719 memset(read_buf, 0, sizeof(read_buf));
5720 called = false;
5721 boost::asio::async_read_at(s, 1234, buffers,
5722 boost::asio::transfer_exactly(10),
5723 bindns::bind(async_read_handler,
5724 _1, _2, 10, &called));
5725 ios.reset();
5726 ios.run();
5727 BOOST_ASIO_CHECK(called);
5728 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5729
5730 s.reset(read_data, sizeof(read_data));
5731 s.next_read_length(1);
5732 memset(read_buf, 0, sizeof(read_buf));
5733 called = false;
5734 boost::asio::async_read_at(s, 0, buffers,
5735 boost::asio::transfer_exactly(10),
5736 bindns::bind(async_read_handler,
5737 _1, _2, 10, &called));
5738 ios.reset();
5739 ios.run();
5740 BOOST_ASIO_CHECK(called);
5741 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5742
5743 s.reset(read_data, sizeof(read_data));
5744 s.next_read_length(1);
5745 memset(read_buf, 0, sizeof(read_buf));
5746 called = false;
5747 boost::asio::async_read_at(s, 1234, buffers,
5748 boost::asio::transfer_exactly(10),
5749 bindns::bind(async_read_handler,
5750 _1, _2, 10, &called));
5751 ios.reset();
5752 ios.run();
5753 BOOST_ASIO_CHECK(called);
5754 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5755
5756 s.reset(read_data, sizeof(read_data));
5757 s.next_read_length(10);
5758 memset(read_buf, 0, sizeof(read_buf));
5759 called = false;
5760 boost::asio::async_read_at(s, 0, buffers,
5761 boost::asio::transfer_exactly(10),
5762 bindns::bind(async_read_handler,
5763 _1, _2, 10, &called));
5764 ios.reset();
5765 ios.run();
5766 BOOST_ASIO_CHECK(called);
5767 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
5768
5769 s.reset(read_data, sizeof(read_data));
5770 s.next_read_length(10);
5771 memset(read_buf, 0, sizeof(read_buf));
5772 called = false;
5773 boost::asio::async_read_at(s, 1234, buffers,
5774 boost::asio::transfer_exactly(10),
5775 bindns::bind(async_read_handler,
5776 _1, _2, 10, &called));
5777 ios.reset();
5778 ios.run();
5779 BOOST_ASIO_CHECK(called);
5780 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
5781
5782 s.reset(read_data, sizeof(read_data));
5783 memset(read_buf, 0, sizeof(read_buf));
5784 called = false;
5785 boost::asio::async_read_at(s, 0, buffers,
5786 boost::asio::transfer_exactly(42),
5787 bindns::bind(async_read_handler,
5788 _1, _2, 42, &called));
5789 ios.reset();
5790 ios.run();
5791 BOOST_ASIO_CHECK(called);
5792 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5793
5794 s.reset(read_data, sizeof(read_data));
5795 memset(read_buf, 0, sizeof(read_buf));
5796 called = false;
5797 boost::asio::async_read_at(s, 1234, buffers,
5798 boost::asio::transfer_exactly(42),
5799 bindns::bind(async_read_handler,
5800 _1, _2, 42, &called));
5801 ios.reset();
5802 ios.run();
5803 BOOST_ASIO_CHECK(called);
5804 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5805
5806 s.reset(read_data, sizeof(read_data));
5807 s.next_read_length(1);
5808 memset(read_buf, 0, sizeof(read_buf));
5809 called = false;
5810 boost::asio::async_read_at(s, 0, buffers,
5811 boost::asio::transfer_exactly(42),
5812 bindns::bind(async_read_handler,
5813 _1, _2, 42, &called));
5814 ios.reset();
5815 ios.run();
5816 BOOST_ASIO_CHECK(called);
5817 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5818
5819 s.reset(read_data, sizeof(read_data));
5820 s.next_read_length(1);
5821 memset(read_buf, 0, sizeof(read_buf));
5822 called = false;
5823 boost::asio::async_read_at(s, 1234, buffers,
5824 boost::asio::transfer_exactly(42),
5825 bindns::bind(async_read_handler,
5826 _1, _2, 42, &called));
5827 ios.reset();
5828 ios.run();
5829 BOOST_ASIO_CHECK(called);
5830 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5831
5832 s.reset(read_data, sizeof(read_data));
5833 s.next_read_length(10);
5834 memset(read_buf, 0, sizeof(read_buf));
5835 called = false;
5836 boost::asio::async_read_at(s, 0, buffers,
5837 boost::asio::transfer_exactly(42),
5838 bindns::bind(async_read_handler,
5839 _1, _2, 42, &called));
5840 ios.reset();
5841 ios.run();
5842 BOOST_ASIO_CHECK(called);
5843 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
5844
5845 s.reset(read_data, sizeof(read_data));
5846 s.next_read_length(10);
5847 memset(read_buf, 0, sizeof(read_buf));
5848 called = false;
5849 boost::asio::async_read_at(s, 1234, buffers,
5850 boost::asio::transfer_exactly(42),
5851 bindns::bind(async_read_handler,
5852 _1, _2, 42, &called));
5853 ios.reset();
5854 ios.run();
5855 BOOST_ASIO_CHECK(called);
5856 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
5857
5858 s.reset(read_data, sizeof(read_data));
5859 memset(read_buf, 0, sizeof(read_buf));
5860 called = false;
5861 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5862 bindns::bind(async_read_handler,
5863 _1, _2, sizeof(read_data), &called));
5864 ios.reset();
5865 ios.run();
5866 BOOST_ASIO_CHECK(called);
5867 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5868
5869 s.reset(read_data, sizeof(read_data));
5870 memset(read_buf, 0, sizeof(read_buf));
5871 called = false;
5872 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5873 bindns::bind(async_read_handler,
5874 _1, _2, sizeof(read_data), &called));
5875 ios.reset();
5876 ios.run();
5877 BOOST_ASIO_CHECK(called);
5878 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5879
5880 s.reset(read_data, sizeof(read_data));
5881 s.next_read_length(1);
5882 memset(read_buf, 0, sizeof(read_buf));
5883 called = false;
5884 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5885 bindns::bind(async_read_handler,
5886 _1, _2, sizeof(read_data), &called));
5887 ios.reset();
5888 ios.run();
5889 BOOST_ASIO_CHECK(called);
5890 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5891
5892 s.reset(read_data, sizeof(read_data));
5893 s.next_read_length(1);
5894 memset(read_buf, 0, sizeof(read_buf));
5895 called = false;
5896 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5897 bindns::bind(async_read_handler,
5898 _1, _2, sizeof(read_data), &called));
5899 ios.reset();
5900 ios.run();
5901 BOOST_ASIO_CHECK(called);
5902 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5903
5904 s.reset(read_data, sizeof(read_data));
5905 s.next_read_length(10);
5906 memset(read_buf, 0, sizeof(read_buf));
5907 called = false;
5908 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
5909 bindns::bind(async_read_handler,
5910 _1, _2, sizeof(read_data), &called));
5911 ios.reset();
5912 ios.run();
5913 BOOST_ASIO_CHECK(called);
5914 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5915
5916 s.reset(read_data, sizeof(read_data));
5917 s.next_read_length(10);
5918 memset(read_buf, 0, sizeof(read_buf));
5919 called = false;
5920 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
5921 bindns::bind(async_read_handler,
5922 _1, _2, sizeof(read_data), &called));
5923 ios.reset();
5924 ios.run();
5925 BOOST_ASIO_CHECK(called);
5926 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5927
5928 s.reset(read_data, sizeof(read_data));
5929 memset(read_buf, 0, sizeof(read_buf));
5930 called = false;
5931 boost::asio::async_read_at(s, 0, buffers, short_transfer,
5932 bindns::bind(async_read_handler,
5933 _1, _2, sizeof(read_data), &called));
5934 ios.reset();
5935 ios.run();
5936 BOOST_ASIO_CHECK(called);
5937 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5938
5939 s.reset(read_data, sizeof(read_data));
5940 memset(read_buf, 0, sizeof(read_buf));
5941 called = false;
5942 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
5943 bindns::bind(async_read_handler,
5944 _1, _2, sizeof(read_data), &called));
5945 ios.reset();
5946 ios.run();
5947 BOOST_ASIO_CHECK(called);
5948 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5949
5950 s.reset(read_data, sizeof(read_data));
5951 s.next_read_length(1);
5952 memset(read_buf, 0, sizeof(read_buf));
5953 called = false;
5954 boost::asio::async_read_at(s, 0, buffers, short_transfer,
5955 bindns::bind(async_read_handler,
5956 _1, _2, sizeof(read_data), &called));
5957 ios.reset();
5958 ios.run();
5959 BOOST_ASIO_CHECK(called);
5960 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5961
5962 s.reset(read_data, sizeof(read_data));
5963 s.next_read_length(1);
5964 memset(read_buf, 0, sizeof(read_buf));
5965 called = false;
5966 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
5967 bindns::bind(async_read_handler,
5968 _1, _2, sizeof(read_data), &called));
5969 ios.reset();
5970 ios.run();
5971 BOOST_ASIO_CHECK(called);
5972 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5973
5974 s.reset(read_data, sizeof(read_data));
5975 s.next_read_length(10);
5976 memset(read_buf, 0, sizeof(read_buf));
5977 called = false;
5978 boost::asio::async_read_at(s, 0, buffers, short_transfer,
5979 bindns::bind(async_read_handler,
5980 _1, _2, sizeof(read_data), &called));
5981 ios.reset();
5982 ios.run();
5983 BOOST_ASIO_CHECK(called);
5984 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
5985
5986 s.reset(read_data, sizeof(read_data));
5987 s.next_read_length(10);
5988 memset(read_buf, 0, sizeof(read_buf));
5989 called = false;
5990 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
5991 bindns::bind(async_read_handler,
5992 _1, _2, sizeof(read_data), &called));
5993 ios.reset();
5994 ios.run();
5995 BOOST_ASIO_CHECK(called);
5996 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
5997
5998 s.reset(read_data, sizeof(read_data));
5999 memset(read_buf, 0, sizeof(read_buf));
6000 int i = boost::asio::async_read_at(s, 1234, buffers,
6001 short_transfer, archetypes::lazy_handler());
6002 BOOST_ASIO_CHECK(i == 42);
6003 ios.reset();
6004 ios.run();
6005 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6006 #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
6007 }
6008
test_5_arg_vector_buffers_async_read_at()6009 void test_5_arg_vector_buffers_async_read_at()
6010 {
6011 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
6012 namespace bindns = boost;
6013 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
6014 namespace bindns = std;
6015 using std::placeholders::_1;
6016 using std::placeholders::_2;
6017 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
6018
6019 boost::asio::io_service ios;
6020 test_random_access_device s(ios);
6021 char read_buf[sizeof(read_data)];
6022 std::vector<boost::asio::mutable_buffer> buffers;
6023 buffers.push_back(boost::asio::buffer(read_buf, 32));
6024 buffers.push_back(boost::asio::buffer(read_buf) + 32);
6025
6026 s.reset(read_data, sizeof(read_data));
6027 memset(read_buf, 0, sizeof(read_buf));
6028 bool called = false;
6029 boost::asio::async_read_at(s, 0, buffers,
6030 boost::asio::transfer_all(),
6031 bindns::bind(async_read_handler,
6032 _1, _2, sizeof(read_data), &called));
6033 ios.reset();
6034 ios.run();
6035 BOOST_ASIO_CHECK(called);
6036 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6037
6038 s.reset(read_data, sizeof(read_data));
6039 memset(read_buf, 0, sizeof(read_buf));
6040 called = false;
6041 boost::asio::async_read_at(s, 1234, buffers,
6042 boost::asio::transfer_all(),
6043 bindns::bind(async_read_handler,
6044 _1, _2, sizeof(read_data), &called));
6045 ios.reset();
6046 ios.run();
6047 BOOST_ASIO_CHECK(called);
6048 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6049
6050 s.reset(read_data, sizeof(read_data));
6051 s.next_read_length(1);
6052 memset(read_buf, 0, sizeof(read_buf));
6053 called = false;
6054 boost::asio::async_read_at(s, 0, buffers,
6055 boost::asio::transfer_all(),
6056 bindns::bind(async_read_handler,
6057 _1, _2, sizeof(read_data), &called));
6058 ios.reset();
6059 ios.run();
6060 BOOST_ASIO_CHECK(called);
6061 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6062
6063 s.reset(read_data, sizeof(read_data));
6064 s.next_read_length(1);
6065 memset(read_buf, 0, sizeof(read_buf));
6066 called = false;
6067 boost::asio::async_read_at(s, 1234, buffers,
6068 boost::asio::transfer_all(),
6069 bindns::bind(async_read_handler,
6070 _1, _2, sizeof(read_data), &called));
6071 ios.reset();
6072 ios.run();
6073 BOOST_ASIO_CHECK(called);
6074 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6075
6076 s.reset(read_data, sizeof(read_data));
6077 s.next_read_length(10);
6078 memset(read_buf, 0, sizeof(read_buf));
6079 called = false;
6080 boost::asio::async_read_at(s, 0, buffers,
6081 boost::asio::transfer_all(),
6082 bindns::bind(async_read_handler,
6083 _1, _2, sizeof(read_data), &called));
6084 ios.reset();
6085 ios.run();
6086 BOOST_ASIO_CHECK(called);
6087 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6088
6089 s.reset(read_data, sizeof(read_data));
6090 s.next_read_length(10);
6091 memset(read_buf, 0, sizeof(read_buf));
6092 called = false;
6093 boost::asio::async_read_at(s, 1234, buffers,
6094 boost::asio::transfer_all(),
6095 bindns::bind(async_read_handler,
6096 _1, _2, sizeof(read_data), &called));
6097 ios.reset();
6098 ios.run();
6099 BOOST_ASIO_CHECK(called);
6100 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6101
6102 s.reset(read_data, sizeof(read_data));
6103 memset(read_buf, 0, sizeof(read_buf));
6104 called = false;
6105 boost::asio::async_read_at(s, 0, buffers,
6106 boost::asio::transfer_at_least(1),
6107 bindns::bind(async_read_handler,
6108 _1, _2, sizeof(read_data), &called));
6109 ios.reset();
6110 ios.run();
6111 BOOST_ASIO_CHECK(called);
6112 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6113
6114 s.reset(read_data, sizeof(read_data));
6115 memset(read_buf, 0, sizeof(read_buf));
6116 called = false;
6117 boost::asio::async_read_at(s, 1234, buffers,
6118 boost::asio::transfer_at_least(1),
6119 bindns::bind(async_read_handler,
6120 _1, _2, sizeof(read_data), &called));
6121 ios.reset();
6122 ios.run();
6123 BOOST_ASIO_CHECK(called);
6124 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6125
6126 s.reset(read_data, sizeof(read_data));
6127 s.next_read_length(1);
6128 memset(read_buf, 0, sizeof(read_buf));
6129 called = false;
6130 boost::asio::async_read_at(s, 0, buffers,
6131 boost::asio::transfer_at_least(1),
6132 bindns::bind(async_read_handler,
6133 _1, _2, 1, &called));
6134 ios.reset();
6135 ios.run();
6136 BOOST_ASIO_CHECK(called);
6137 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
6138
6139 s.reset(read_data, sizeof(read_data));
6140 s.next_read_length(1);
6141 memset(read_buf, 0, sizeof(read_buf));
6142 called = false;
6143 boost::asio::async_read_at(s, 1234, buffers,
6144 boost::asio::transfer_at_least(1),
6145 bindns::bind(async_read_handler,
6146 _1, _2, 1, &called));
6147 ios.reset();
6148 ios.run();
6149 BOOST_ASIO_CHECK(called);
6150 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
6151
6152 s.reset(read_data, sizeof(read_data));
6153 s.next_read_length(10);
6154 memset(read_buf, 0, sizeof(read_buf));
6155 called = false;
6156 boost::asio::async_read_at(s, 0, buffers,
6157 boost::asio::transfer_at_least(1),
6158 bindns::bind(async_read_handler,
6159 _1, _2, 10, &called));
6160 ios.reset();
6161 ios.run();
6162 BOOST_ASIO_CHECK(called);
6163 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6164
6165 s.reset(read_data, sizeof(read_data));
6166 s.next_read_length(10);
6167 memset(read_buf, 0, sizeof(read_buf));
6168 called = false;
6169 boost::asio::async_read_at(s, 1234, buffers,
6170 boost::asio::transfer_at_least(1),
6171 bindns::bind(async_read_handler,
6172 _1, _2, 10, &called));
6173 ios.reset();
6174 ios.run();
6175 BOOST_ASIO_CHECK(called);
6176 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6177
6178 s.reset(read_data, sizeof(read_data));
6179 memset(read_buf, 0, sizeof(read_buf));
6180 called = false;
6181 boost::asio::async_read_at(s, 0, buffers,
6182 boost::asio::transfer_at_least(10),
6183 bindns::bind(async_read_handler,
6184 _1, _2, sizeof(read_data), &called));
6185 ios.reset();
6186 ios.run();
6187 BOOST_ASIO_CHECK(called);
6188 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6189
6190 s.reset(read_data, sizeof(read_data));
6191 memset(read_buf, 0, sizeof(read_buf));
6192 called = false;
6193 boost::asio::async_read_at(s, 1234, buffers,
6194 boost::asio::transfer_at_least(10),
6195 bindns::bind(async_read_handler,
6196 _1, _2, sizeof(read_data), &called));
6197 ios.reset();
6198 ios.run();
6199 BOOST_ASIO_CHECK(called);
6200 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6201
6202 s.reset(read_data, sizeof(read_data));
6203 s.next_read_length(1);
6204 memset(read_buf, 0, sizeof(read_buf));
6205 called = false;
6206 boost::asio::async_read_at(s, 0, buffers,
6207 boost::asio::transfer_at_least(10),
6208 bindns::bind(async_read_handler,
6209 _1, _2, 10, &called));
6210 ios.reset();
6211 ios.run();
6212 BOOST_ASIO_CHECK(called);
6213 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6214
6215 s.reset(read_data, sizeof(read_data));
6216 s.next_read_length(1);
6217 memset(read_buf, 0, sizeof(read_buf));
6218 called = false;
6219 boost::asio::async_read_at(s, 1234, buffers,
6220 boost::asio::transfer_at_least(10),
6221 bindns::bind(async_read_handler,
6222 _1, _2, 10, &called));
6223 ios.reset();
6224 ios.run();
6225 BOOST_ASIO_CHECK(called);
6226 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6227
6228 s.reset(read_data, sizeof(read_data));
6229 s.next_read_length(10);
6230 memset(read_buf, 0, sizeof(read_buf));
6231 called = false;
6232 boost::asio::async_read_at(s, 0, buffers,
6233 boost::asio::transfer_at_least(10),
6234 bindns::bind(async_read_handler,
6235 _1, _2, 10, &called));
6236 ios.reset();
6237 ios.run();
6238 BOOST_ASIO_CHECK(called);
6239 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6240
6241 s.reset(read_data, sizeof(read_data));
6242 s.next_read_length(10);
6243 memset(read_buf, 0, sizeof(read_buf));
6244 called = false;
6245 boost::asio::async_read_at(s, 1234, buffers,
6246 boost::asio::transfer_at_least(10),
6247 bindns::bind(async_read_handler,
6248 _1, _2, 10, &called));
6249 ios.reset();
6250 ios.run();
6251 BOOST_ASIO_CHECK(called);
6252 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6253
6254 s.reset(read_data, sizeof(read_data));
6255 memset(read_buf, 0, sizeof(read_buf));
6256 called = false;
6257 boost::asio::async_read_at(s, 0, buffers,
6258 boost::asio::transfer_at_least(42),
6259 bindns::bind(async_read_handler,
6260 _1, _2, sizeof(read_data), &called));
6261 ios.reset();
6262 ios.run();
6263 BOOST_ASIO_CHECK(called);
6264 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6265
6266 s.reset(read_data, sizeof(read_data));
6267 memset(read_buf, 0, sizeof(read_buf));
6268 called = false;
6269 boost::asio::async_read_at(s, 1234, buffers,
6270 boost::asio::transfer_at_least(42),
6271 bindns::bind(async_read_handler,
6272 _1, _2, sizeof(read_data), &called));
6273 ios.reset();
6274 ios.run();
6275 BOOST_ASIO_CHECK(called);
6276 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6277
6278 s.reset(read_data, sizeof(read_data));
6279 s.next_read_length(1);
6280 memset(read_buf, 0, sizeof(read_buf));
6281 called = false;
6282 boost::asio::async_read_at(s, 0, buffers,
6283 boost::asio::transfer_at_least(42),
6284 bindns::bind(async_read_handler,
6285 _1, _2, 42, &called));
6286 ios.reset();
6287 ios.run();
6288 BOOST_ASIO_CHECK(called);
6289 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
6290
6291 s.reset(read_data, sizeof(read_data));
6292 s.next_read_length(1);
6293 memset(read_buf, 0, sizeof(read_buf));
6294 called = false;
6295 boost::asio::async_read_at(s, 1234, buffers,
6296 boost::asio::transfer_at_least(42),
6297 bindns::bind(async_read_handler,
6298 _1, _2, 42, &called));
6299 ios.reset();
6300 ios.run();
6301 BOOST_ASIO_CHECK(called);
6302 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
6303
6304 s.reset(read_data, sizeof(read_data));
6305 s.next_read_length(10);
6306 memset(read_buf, 0, sizeof(read_buf));
6307 called = false;
6308 boost::asio::async_read_at(s, 0, buffers,
6309 boost::asio::transfer_at_least(42),
6310 bindns::bind(async_read_handler,
6311 _1, _2, 50, &called));
6312 ios.reset();
6313 ios.run();
6314 BOOST_ASIO_CHECK(called);
6315 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 50));
6316
6317 s.reset(read_data, sizeof(read_data));
6318 s.next_read_length(10);
6319 memset(read_buf, 0, sizeof(read_buf));
6320 called = false;
6321 boost::asio::async_read_at(s, 1234, buffers,
6322 boost::asio::transfer_at_least(42),
6323 bindns::bind(async_read_handler,
6324 _1, _2, 50, &called));
6325 ios.reset();
6326 ios.run();
6327 BOOST_ASIO_CHECK(called);
6328 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 50));
6329
6330 s.reset(read_data, sizeof(read_data));
6331 memset(read_buf, 0, sizeof(read_buf));
6332 called = false;
6333 boost::asio::async_read_at(s, 0, buffers,
6334 boost::asio::transfer_exactly(1),
6335 bindns::bind(async_read_handler,
6336 _1, _2, 1, &called));
6337 ios.reset();
6338 ios.run();
6339 BOOST_ASIO_CHECK(called);
6340 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
6341
6342 s.reset(read_data, sizeof(read_data));
6343 memset(read_buf, 0, sizeof(read_buf));
6344 called = false;
6345 boost::asio::async_read_at(s, 1234, buffers,
6346 boost::asio::transfer_exactly(1),
6347 bindns::bind(async_read_handler,
6348 _1, _2, 1, &called));
6349 ios.reset();
6350 ios.run();
6351 BOOST_ASIO_CHECK(called);
6352 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
6353
6354 s.reset(read_data, sizeof(read_data));
6355 s.next_read_length(1);
6356 memset(read_buf, 0, sizeof(read_buf));
6357 called = false;
6358 boost::asio::async_read_at(s, 0, buffers,
6359 boost::asio::transfer_exactly(1),
6360 bindns::bind(async_read_handler,
6361 _1, _2, 1, &called));
6362 ios.reset();
6363 ios.run();
6364 BOOST_ASIO_CHECK(called);
6365 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
6366
6367 s.reset(read_data, sizeof(read_data));
6368 s.next_read_length(1);
6369 memset(read_buf, 0, sizeof(read_buf));
6370 called = false;
6371 boost::asio::async_read_at(s, 1234, buffers,
6372 boost::asio::transfer_exactly(1),
6373 bindns::bind(async_read_handler,
6374 _1, _2, 1, &called));
6375 ios.reset();
6376 ios.run();
6377 BOOST_ASIO_CHECK(called);
6378 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
6379
6380 s.reset(read_data, sizeof(read_data));
6381 s.next_read_length(10);
6382 memset(read_buf, 0, sizeof(read_buf));
6383 called = false;
6384 boost::asio::async_read_at(s, 0, buffers,
6385 boost::asio::transfer_exactly(1),
6386 bindns::bind(async_read_handler,
6387 _1, _2, 1, &called));
6388 ios.reset();
6389 ios.run();
6390 BOOST_ASIO_CHECK(called);
6391 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 1));
6392
6393 s.reset(read_data, sizeof(read_data));
6394 s.next_read_length(10);
6395 memset(read_buf, 0, sizeof(read_buf));
6396 called = false;
6397 boost::asio::async_read_at(s, 1234, buffers,
6398 boost::asio::transfer_exactly(1),
6399 bindns::bind(async_read_handler,
6400 _1, _2, 1, &called));
6401 ios.reset();
6402 ios.run();
6403 BOOST_ASIO_CHECK(called);
6404 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 1));
6405
6406 s.reset(read_data, sizeof(read_data));
6407 memset(read_buf, 0, sizeof(read_buf));
6408 called = false;
6409 boost::asio::async_read_at(s, 0, buffers,
6410 boost::asio::transfer_exactly(10),
6411 bindns::bind(async_read_handler,
6412 _1, _2, 10, &called));
6413 ios.reset();
6414 ios.run();
6415 BOOST_ASIO_CHECK(called);
6416 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6417
6418 s.reset(read_data, sizeof(read_data));
6419 memset(read_buf, 0, sizeof(read_buf));
6420 called = false;
6421 boost::asio::async_read_at(s, 1234, buffers,
6422 boost::asio::transfer_exactly(10),
6423 bindns::bind(async_read_handler,
6424 _1, _2, 10, &called));
6425 ios.reset();
6426 ios.run();
6427 BOOST_ASIO_CHECK(called);
6428 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6429
6430 s.reset(read_data, sizeof(read_data));
6431 s.next_read_length(1);
6432 memset(read_buf, 0, sizeof(read_buf));
6433 called = false;
6434 boost::asio::async_read_at(s, 0, buffers,
6435 boost::asio::transfer_exactly(10),
6436 bindns::bind(async_read_handler,
6437 _1, _2, 10, &called));
6438 ios.reset();
6439 ios.run();
6440 BOOST_ASIO_CHECK(called);
6441 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6442
6443 s.reset(read_data, sizeof(read_data));
6444 s.next_read_length(1);
6445 memset(read_buf, 0, sizeof(read_buf));
6446 called = false;
6447 boost::asio::async_read_at(s, 1234, buffers,
6448 boost::asio::transfer_exactly(10),
6449 bindns::bind(async_read_handler,
6450 _1, _2, 10, &called));
6451 ios.reset();
6452 ios.run();
6453 BOOST_ASIO_CHECK(called);
6454 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6455
6456 s.reset(read_data, sizeof(read_data));
6457 s.next_read_length(10);
6458 memset(read_buf, 0, sizeof(read_buf));
6459 called = false;
6460 boost::asio::async_read_at(s, 0, buffers,
6461 boost::asio::transfer_exactly(10),
6462 bindns::bind(async_read_handler,
6463 _1, _2, 10, &called));
6464 ios.reset();
6465 ios.run();
6466 BOOST_ASIO_CHECK(called);
6467 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 10));
6468
6469 s.reset(read_data, sizeof(read_data));
6470 s.next_read_length(10);
6471 memset(read_buf, 0, sizeof(read_buf));
6472 called = false;
6473 boost::asio::async_read_at(s, 1234, buffers,
6474 boost::asio::transfer_exactly(10),
6475 bindns::bind(async_read_handler,
6476 _1, _2, 10, &called));
6477 ios.reset();
6478 ios.run();
6479 BOOST_ASIO_CHECK(called);
6480 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 10));
6481
6482 s.reset(read_data, sizeof(read_data));
6483 memset(read_buf, 0, sizeof(read_buf));
6484 called = false;
6485 boost::asio::async_read_at(s, 0, buffers,
6486 boost::asio::transfer_exactly(42),
6487 bindns::bind(async_read_handler,
6488 _1, _2, 42, &called));
6489 ios.reset();
6490 ios.run();
6491 BOOST_ASIO_CHECK(called);
6492 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
6493
6494 s.reset(read_data, sizeof(read_data));
6495 memset(read_buf, 0, sizeof(read_buf));
6496 called = false;
6497 boost::asio::async_read_at(s, 1234, buffers,
6498 boost::asio::transfer_exactly(42),
6499 bindns::bind(async_read_handler,
6500 _1, _2, 42, &called));
6501 ios.reset();
6502 ios.run();
6503 BOOST_ASIO_CHECK(called);
6504 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
6505
6506 s.reset(read_data, sizeof(read_data));
6507 s.next_read_length(1);
6508 memset(read_buf, 0, sizeof(read_buf));
6509 called = false;
6510 boost::asio::async_read_at(s, 0, buffers,
6511 boost::asio::transfer_exactly(42),
6512 bindns::bind(async_read_handler,
6513 _1, _2, 42, &called));
6514 ios.reset();
6515 ios.run();
6516 BOOST_ASIO_CHECK(called);
6517 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
6518
6519 s.reset(read_data, sizeof(read_data));
6520 s.next_read_length(1);
6521 memset(read_buf, 0, sizeof(read_buf));
6522 called = false;
6523 boost::asio::async_read_at(s, 1234, buffers,
6524 boost::asio::transfer_exactly(42),
6525 bindns::bind(async_read_handler,
6526 _1, _2, 42, &called));
6527 ios.reset();
6528 ios.run();
6529 BOOST_ASIO_CHECK(called);
6530 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
6531
6532 s.reset(read_data, sizeof(read_data));
6533 s.next_read_length(10);
6534 memset(read_buf, 0, sizeof(read_buf));
6535 called = false;
6536 boost::asio::async_read_at(s, 0, buffers,
6537 boost::asio::transfer_exactly(42),
6538 bindns::bind(async_read_handler,
6539 _1, _2, 42, &called));
6540 ios.reset();
6541 ios.run();
6542 BOOST_ASIO_CHECK(called);
6543 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, 42));
6544
6545 s.reset(read_data, sizeof(read_data));
6546 s.next_read_length(10);
6547 memset(read_buf, 0, sizeof(read_buf));
6548 called = false;
6549 boost::asio::async_read_at(s, 1234, buffers,
6550 boost::asio::transfer_exactly(42),
6551 bindns::bind(async_read_handler,
6552 _1, _2, 42, &called));
6553 ios.reset();
6554 ios.run();
6555 BOOST_ASIO_CHECK(called);
6556 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, 42));
6557
6558 s.reset(read_data, sizeof(read_data));
6559 memset(read_buf, 0, sizeof(read_buf));
6560 called = false;
6561 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
6562 bindns::bind(async_read_handler,
6563 _1, _2, sizeof(read_data), &called));
6564 ios.reset();
6565 ios.run();
6566 BOOST_ASIO_CHECK(called);
6567 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6568
6569 s.reset(read_data, sizeof(read_data));
6570 memset(read_buf, 0, sizeof(read_buf));
6571 called = false;
6572 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
6573 bindns::bind(async_read_handler,
6574 _1, _2, sizeof(read_data), &called));
6575 ios.reset();
6576 ios.run();
6577 BOOST_ASIO_CHECK(called);
6578 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6579
6580 s.reset(read_data, sizeof(read_data));
6581 s.next_read_length(1);
6582 memset(read_buf, 0, sizeof(read_buf));
6583 called = false;
6584 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
6585 bindns::bind(async_read_handler,
6586 _1, _2, sizeof(read_data), &called));
6587 ios.reset();
6588 ios.run();
6589 BOOST_ASIO_CHECK(called);
6590 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6591
6592 s.reset(read_data, sizeof(read_data));
6593 s.next_read_length(1);
6594 memset(read_buf, 0, sizeof(read_buf));
6595 called = false;
6596 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
6597 bindns::bind(async_read_handler,
6598 _1, _2, sizeof(read_data), &called));
6599 ios.reset();
6600 ios.run();
6601 BOOST_ASIO_CHECK(called);
6602 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6603
6604 s.reset(read_data, sizeof(read_data));
6605 s.next_read_length(10);
6606 memset(read_buf, 0, sizeof(read_buf));
6607 called = false;
6608 boost::asio::async_read_at(s, 0, buffers, old_style_transfer_all,
6609 bindns::bind(async_read_handler,
6610 _1, _2, sizeof(read_data), &called));
6611 ios.reset();
6612 ios.run();
6613 BOOST_ASIO_CHECK(called);
6614 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6615
6616 s.reset(read_data, sizeof(read_data));
6617 s.next_read_length(10);
6618 memset(read_buf, 0, sizeof(read_buf));
6619 called = false;
6620 boost::asio::async_read_at(s, 1234, buffers, old_style_transfer_all,
6621 bindns::bind(async_read_handler,
6622 _1, _2, sizeof(read_data), &called));
6623 ios.reset();
6624 ios.run();
6625 BOOST_ASIO_CHECK(called);
6626 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6627
6628 s.reset(read_data, sizeof(read_data));
6629 memset(read_buf, 0, sizeof(read_buf));
6630 called = false;
6631 boost::asio::async_read_at(s, 0, buffers, short_transfer,
6632 bindns::bind(async_read_handler,
6633 _1, _2, sizeof(read_data), &called));
6634 ios.reset();
6635 ios.run();
6636 BOOST_ASIO_CHECK(called);
6637 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6638
6639 s.reset(read_data, sizeof(read_data));
6640 memset(read_buf, 0, sizeof(read_buf));
6641 called = false;
6642 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
6643 bindns::bind(async_read_handler,
6644 _1, _2, sizeof(read_data), &called));
6645 ios.reset();
6646 ios.run();
6647 BOOST_ASIO_CHECK(called);
6648 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6649
6650 s.reset(read_data, sizeof(read_data));
6651 s.next_read_length(1);
6652 memset(read_buf, 0, sizeof(read_buf));
6653 called = false;
6654 boost::asio::async_read_at(s, 0, buffers, short_transfer,
6655 bindns::bind(async_read_handler,
6656 _1, _2, sizeof(read_data), &called));
6657 ios.reset();
6658 ios.run();
6659 BOOST_ASIO_CHECK(called);
6660 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6661
6662 s.reset(read_data, sizeof(read_data));
6663 s.next_read_length(1);
6664 memset(read_buf, 0, sizeof(read_buf));
6665 called = false;
6666 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
6667 bindns::bind(async_read_handler,
6668 _1, _2, sizeof(read_data), &called));
6669 ios.reset();
6670 ios.run();
6671 BOOST_ASIO_CHECK(called);
6672 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6673
6674 s.reset(read_data, sizeof(read_data));
6675 s.next_read_length(10);
6676 memset(read_buf, 0, sizeof(read_buf));
6677 called = false;
6678 boost::asio::async_read_at(s, 0, buffers, short_transfer,
6679 bindns::bind(async_read_handler,
6680 _1, _2, sizeof(read_data), &called));
6681 ios.reset();
6682 ios.run();
6683 BOOST_ASIO_CHECK(called);
6684 BOOST_ASIO_CHECK(s.check_buffers(0, buffers, sizeof(read_data)));
6685
6686 s.reset(read_data, sizeof(read_data));
6687 s.next_read_length(10);
6688 memset(read_buf, 0, sizeof(read_buf));
6689 called = false;
6690 boost::asio::async_read_at(s, 1234, buffers, short_transfer,
6691 bindns::bind(async_read_handler,
6692 _1, _2, sizeof(read_data), &called));
6693 ios.reset();
6694 ios.run();
6695 BOOST_ASIO_CHECK(called);
6696 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6697
6698 s.reset(read_data, sizeof(read_data));
6699 memset(read_buf, 0, sizeof(read_buf));
6700 int i = boost::asio::async_read_at(s, 1234, buffers,
6701 short_transfer, archetypes::lazy_handler());
6702 BOOST_ASIO_CHECK(i == 42);
6703 ios.reset();
6704 ios.run();
6705 BOOST_ASIO_CHECK(s.check_buffers(1234, buffers, sizeof(read_data)));
6706 }
6707
test_5_arg_streambuf_async_read_at()6708 void test_5_arg_streambuf_async_read_at()
6709 {
6710 #if defined(BOOST_ASIO_HAS_BOOST_BIND)
6711 namespace bindns = boost;
6712 #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
6713 namespace bindns = std;
6714 using std::placeholders::_1;
6715 using std::placeholders::_2;
6716 #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
6717
6718 boost::asio::io_service ios;
6719 test_random_access_device s(ios);
6720 boost::asio::streambuf sb(sizeof(read_data));
6721
6722 s.reset(read_data, sizeof(read_data));
6723 sb.consume(sb.size());
6724 bool called = false;
6725 boost::asio::async_read_at(s, 0, sb,
6726 boost::asio::transfer_all(),
6727 bindns::bind(async_read_handler,
6728 _1, _2, sizeof(read_data), &called));
6729 ios.reset();
6730 ios.run();
6731 BOOST_ASIO_CHECK(called);
6732 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6733 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6734
6735 s.reset(read_data, sizeof(read_data));
6736 sb.consume(sb.size());
6737 called = false;
6738 boost::asio::async_read_at(s, 1234, sb,
6739 boost::asio::transfer_all(),
6740 bindns::bind(async_read_handler,
6741 _1, _2, sizeof(read_data), &called));
6742 ios.reset();
6743 ios.run();
6744 BOOST_ASIO_CHECK(called);
6745 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6746 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6747
6748 s.reset(read_data, sizeof(read_data));
6749 s.next_read_length(1);
6750 sb.consume(sb.size());
6751 called = false;
6752 boost::asio::async_read_at(s, 0, sb,
6753 boost::asio::transfer_all(),
6754 bindns::bind(async_read_handler,
6755 _1, _2, sizeof(read_data), &called));
6756 ios.reset();
6757 ios.run();
6758 BOOST_ASIO_CHECK(called);
6759 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6760 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6761
6762 s.reset(read_data, sizeof(read_data));
6763 s.next_read_length(1);
6764 sb.consume(sb.size());
6765 called = false;
6766 boost::asio::async_read_at(s, 1234, sb,
6767 boost::asio::transfer_all(),
6768 bindns::bind(async_read_handler,
6769 _1, _2, sizeof(read_data), &called));
6770 ios.reset();
6771 ios.run();
6772 BOOST_ASIO_CHECK(called);
6773 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6774 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6775
6776 s.reset(read_data, sizeof(read_data));
6777 s.next_read_length(10);
6778 sb.consume(sb.size());
6779 called = false;
6780 boost::asio::async_read_at(s, 0, sb,
6781 boost::asio::transfer_all(),
6782 bindns::bind(async_read_handler,
6783 _1, _2, sizeof(read_data), &called));
6784 ios.reset();
6785 ios.run();
6786 BOOST_ASIO_CHECK(called);
6787 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6788 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6789
6790 s.reset(read_data, sizeof(read_data));
6791 s.next_read_length(10);
6792 sb.consume(sb.size());
6793 called = false;
6794 boost::asio::async_read_at(s, 1234, sb,
6795 boost::asio::transfer_all(),
6796 bindns::bind(async_read_handler,
6797 _1, _2, sizeof(read_data), &called));
6798 ios.reset();
6799 ios.run();
6800 BOOST_ASIO_CHECK(called);
6801 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6802 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6803
6804 s.reset(read_data, sizeof(read_data));
6805 sb.consume(sb.size());
6806 called = false;
6807 boost::asio::async_read_at(s, 0, sb,
6808 boost::asio::transfer_at_least(1),
6809 bindns::bind(async_read_handler,
6810 _1, _2, sizeof(read_data), &called));
6811 ios.reset();
6812 ios.run();
6813 BOOST_ASIO_CHECK(called);
6814 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6815 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6816
6817 s.reset(read_data, sizeof(read_data));
6818 sb.consume(sb.size());
6819 called = false;
6820 boost::asio::async_read_at(s, 1234, sb,
6821 boost::asio::transfer_at_least(1),
6822 bindns::bind(async_read_handler,
6823 _1, _2, sizeof(read_data), &called));
6824 ios.reset();
6825 ios.run();
6826 BOOST_ASIO_CHECK(called);
6827 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6828 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6829
6830 s.reset(read_data, sizeof(read_data));
6831 s.next_read_length(1);
6832 sb.consume(sb.size());
6833 called = false;
6834 boost::asio::async_read_at(s, 0, sb,
6835 boost::asio::transfer_at_least(1),
6836 bindns::bind(async_read_handler,
6837 _1, _2, 1, &called));
6838 ios.reset();
6839 ios.run();
6840 BOOST_ASIO_CHECK(called);
6841 BOOST_ASIO_CHECK(sb.size() == 1);
6842 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
6843
6844 s.reset(read_data, sizeof(read_data));
6845 s.next_read_length(1);
6846 sb.consume(sb.size());
6847 called = false;
6848 boost::asio::async_read_at(s, 1234, sb,
6849 boost::asio::transfer_at_least(1),
6850 bindns::bind(async_read_handler,
6851 _1, _2, 1, &called));
6852 ios.reset();
6853 ios.run();
6854 BOOST_ASIO_CHECK(called);
6855 BOOST_ASIO_CHECK(sb.size() == 1);
6856 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
6857
6858 s.reset(read_data, sizeof(read_data));
6859 s.next_read_length(10);
6860 sb.consume(sb.size());
6861 called = false;
6862 boost::asio::async_read_at(s, 0, sb,
6863 boost::asio::transfer_at_least(1),
6864 bindns::bind(async_read_handler,
6865 _1, _2, 10, &called));
6866 ios.reset();
6867 ios.run();
6868 BOOST_ASIO_CHECK(called);
6869 BOOST_ASIO_CHECK(sb.size() == 10);
6870 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
6871
6872 s.reset(read_data, sizeof(read_data));
6873 s.next_read_length(10);
6874 sb.consume(sb.size());
6875 called = false;
6876 boost::asio::async_read_at(s, 1234, sb,
6877 boost::asio::transfer_at_least(1),
6878 bindns::bind(async_read_handler,
6879 _1, _2, 10, &called));
6880 ios.reset();
6881 ios.run();
6882 BOOST_ASIO_CHECK(called);
6883 BOOST_ASIO_CHECK(sb.size() == 10);
6884 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
6885
6886 s.reset(read_data, sizeof(read_data));
6887 sb.consume(sb.size());
6888 called = false;
6889 boost::asio::async_read_at(s, 0, sb,
6890 boost::asio::transfer_at_least(10),
6891 bindns::bind(async_read_handler,
6892 _1, _2, sizeof(read_data), &called));
6893 ios.reset();
6894 ios.run();
6895 BOOST_ASIO_CHECK(called);
6896 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6897 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6898
6899 s.reset(read_data, sizeof(read_data));
6900 sb.consume(sb.size());
6901 called = false;
6902 boost::asio::async_read_at(s, 1234, sb,
6903 boost::asio::transfer_at_least(10),
6904 bindns::bind(async_read_handler,
6905 _1, _2, sizeof(read_data), &called));
6906 ios.reset();
6907 ios.run();
6908 BOOST_ASIO_CHECK(called);
6909 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6910 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6911
6912 s.reset(read_data, sizeof(read_data));
6913 s.next_read_length(1);
6914 sb.consume(sb.size());
6915 called = false;
6916 boost::asio::async_read_at(s, 0, sb,
6917 boost::asio::transfer_at_least(10),
6918 bindns::bind(async_read_handler,
6919 _1, _2, 10, &called));
6920 ios.reset();
6921 ios.run();
6922 BOOST_ASIO_CHECK(called);
6923 BOOST_ASIO_CHECK(sb.size() == 10);
6924 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
6925
6926 s.reset(read_data, sizeof(read_data));
6927 s.next_read_length(1);
6928 sb.consume(sb.size());
6929 called = false;
6930 boost::asio::async_read_at(s, 1234, sb,
6931 boost::asio::transfer_at_least(10),
6932 bindns::bind(async_read_handler,
6933 _1, _2, 10, &called));
6934 ios.reset();
6935 ios.run();
6936 BOOST_ASIO_CHECK(called);
6937 BOOST_ASIO_CHECK(sb.size() == 10);
6938 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
6939
6940 s.reset(read_data, sizeof(read_data));
6941 s.next_read_length(10);
6942 sb.consume(sb.size());
6943 called = false;
6944 boost::asio::async_read_at(s, 0, sb,
6945 boost::asio::transfer_at_least(10),
6946 bindns::bind(async_read_handler,
6947 _1, _2, 10, &called));
6948 ios.reset();
6949 ios.run();
6950 BOOST_ASIO_CHECK(called);
6951 BOOST_ASIO_CHECK(sb.size() == 10);
6952 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
6953
6954 s.reset(read_data, sizeof(read_data));
6955 s.next_read_length(10);
6956 sb.consume(sb.size());
6957 called = false;
6958 boost::asio::async_read_at(s, 1234, sb,
6959 boost::asio::transfer_at_least(10),
6960 bindns::bind(async_read_handler,
6961 _1, _2, 10, &called));
6962 ios.reset();
6963 ios.run();
6964 BOOST_ASIO_CHECK(called);
6965 BOOST_ASIO_CHECK(sb.size() == 10);
6966 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
6967
6968 s.reset(read_data, sizeof(read_data));
6969 sb.consume(sb.size());
6970 called = false;
6971 boost::asio::async_read_at(s, 0, sb,
6972 boost::asio::transfer_at_least(42),
6973 bindns::bind(async_read_handler,
6974 _1, _2, sizeof(read_data), &called));
6975 ios.reset();
6976 ios.run();
6977 BOOST_ASIO_CHECK(called);
6978 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6979 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
6980
6981 s.reset(read_data, sizeof(read_data));
6982 sb.consume(sb.size());
6983 called = false;
6984 boost::asio::async_read_at(s, 1234, sb,
6985 boost::asio::transfer_at_least(42),
6986 bindns::bind(async_read_handler,
6987 _1, _2, sizeof(read_data), &called));
6988 ios.reset();
6989 ios.run();
6990 BOOST_ASIO_CHECK(called);
6991 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
6992 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
6993
6994 s.reset(read_data, sizeof(read_data));
6995 s.next_read_length(1);
6996 sb.consume(sb.size());
6997 called = false;
6998 boost::asio::async_read_at(s, 0, sb,
6999 boost::asio::transfer_at_least(42),
7000 bindns::bind(async_read_handler,
7001 _1, _2, 42, &called));
7002 ios.reset();
7003 ios.run();
7004 BOOST_ASIO_CHECK(called);
7005 BOOST_ASIO_CHECK(sb.size() == 42);
7006 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
7007
7008 s.reset(read_data, sizeof(read_data));
7009 s.next_read_length(1);
7010 sb.consume(sb.size());
7011 called = false;
7012 boost::asio::async_read_at(s, 1234, sb,
7013 boost::asio::transfer_at_least(42),
7014 bindns::bind(async_read_handler,
7015 _1, _2, 42, &called));
7016 ios.reset();
7017 ios.run();
7018 BOOST_ASIO_CHECK(called);
7019 BOOST_ASIO_CHECK(sb.size() == 42);
7020 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
7021
7022 s.reset(read_data, sizeof(read_data));
7023 s.next_read_length(10);
7024 sb.consume(sb.size());
7025 called = false;
7026 boost::asio::async_read_at(s, 0, sb,
7027 boost::asio::transfer_at_least(42),
7028 bindns::bind(async_read_handler,
7029 _1, _2, 50, &called));
7030 ios.reset();
7031 ios.run();
7032 BOOST_ASIO_CHECK(called);
7033 BOOST_ASIO_CHECK(sb.size() == 50);
7034 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 50));
7035
7036 s.reset(read_data, sizeof(read_data));
7037 s.next_read_length(10);
7038 sb.consume(sb.size());
7039 called = false;
7040 boost::asio::async_read_at(s, 1234, sb,
7041 boost::asio::transfer_at_least(42),
7042 bindns::bind(async_read_handler,
7043 _1, _2, 50, &called));
7044 ios.reset();
7045 ios.run();
7046 BOOST_ASIO_CHECK(called);
7047 BOOST_ASIO_CHECK(sb.size() == 50);
7048 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 50));
7049
7050 s.reset(read_data, sizeof(read_data));
7051 sb.consume(sb.size());
7052 called = false;
7053 boost::asio::async_read_at(s, 0, sb,
7054 boost::asio::transfer_exactly(1),
7055 bindns::bind(async_read_handler,
7056 _1, _2, 1, &called));
7057 ios.reset();
7058 ios.run();
7059 BOOST_ASIO_CHECK(called);
7060 BOOST_ASIO_CHECK(sb.size() == 1);
7061 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
7062
7063 s.reset(read_data, sizeof(read_data));
7064 sb.consume(sb.size());
7065 called = false;
7066 boost::asio::async_read_at(s, 1234, sb,
7067 boost::asio::transfer_exactly(1),
7068 bindns::bind(async_read_handler,
7069 _1, _2, 1, &called));
7070 ios.reset();
7071 ios.run();
7072 BOOST_ASIO_CHECK(called);
7073 BOOST_ASIO_CHECK(sb.size() == 1);
7074 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
7075
7076 s.reset(read_data, sizeof(read_data));
7077 s.next_read_length(1);
7078 sb.consume(sb.size());
7079 called = false;
7080 boost::asio::async_read_at(s, 0, sb,
7081 boost::asio::transfer_exactly(1),
7082 bindns::bind(async_read_handler,
7083 _1, _2, 1, &called));
7084 ios.reset();
7085 ios.run();
7086 BOOST_ASIO_CHECK(called);
7087 BOOST_ASIO_CHECK(sb.size() == 1);
7088 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
7089
7090 s.reset(read_data, sizeof(read_data));
7091 s.next_read_length(1);
7092 sb.consume(sb.size());
7093 called = false;
7094 boost::asio::async_read_at(s, 1234, sb,
7095 boost::asio::transfer_exactly(1),
7096 bindns::bind(async_read_handler,
7097 _1, _2, 1, &called));
7098 ios.reset();
7099 ios.run();
7100 BOOST_ASIO_CHECK(called);
7101 BOOST_ASIO_CHECK(sb.size() == 1);
7102 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
7103
7104 s.reset(read_data, sizeof(read_data));
7105 s.next_read_length(10);
7106 sb.consume(sb.size());
7107 called = false;
7108 boost::asio::async_read_at(s, 0, sb,
7109 boost::asio::transfer_exactly(1),
7110 bindns::bind(async_read_handler,
7111 _1, _2, 1, &called));
7112 ios.reset();
7113 ios.run();
7114 BOOST_ASIO_CHECK(called);
7115 BOOST_ASIO_CHECK(sb.size() == 1);
7116 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 1));
7117
7118 s.reset(read_data, sizeof(read_data));
7119 s.next_read_length(10);
7120 sb.consume(sb.size());
7121 called = false;
7122 boost::asio::async_read_at(s, 1234, sb,
7123 boost::asio::transfer_exactly(1),
7124 bindns::bind(async_read_handler,
7125 _1, _2, 1, &called));
7126 ios.reset();
7127 ios.run();
7128 BOOST_ASIO_CHECK(called);
7129 BOOST_ASIO_CHECK(sb.size() == 1);
7130 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 1));
7131
7132 s.reset(read_data, sizeof(read_data));
7133 sb.consume(sb.size());
7134 called = false;
7135 boost::asio::async_read_at(s, 0, sb,
7136 boost::asio::transfer_exactly(10),
7137 bindns::bind(async_read_handler,
7138 _1, _2, 10, &called));
7139 ios.reset();
7140 ios.run();
7141 BOOST_ASIO_CHECK(called);
7142 BOOST_ASIO_CHECK(sb.size() == 10);
7143 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
7144
7145 s.reset(read_data, sizeof(read_data));
7146 sb.consume(sb.size());
7147 called = false;
7148 boost::asio::async_read_at(s, 1234, sb,
7149 boost::asio::transfer_exactly(10),
7150 bindns::bind(async_read_handler,
7151 _1, _2, 10, &called));
7152 ios.reset();
7153 ios.run();
7154 BOOST_ASIO_CHECK(called);
7155 BOOST_ASIO_CHECK(sb.size() == 10);
7156 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
7157
7158 s.reset(read_data, sizeof(read_data));
7159 s.next_read_length(1);
7160 sb.consume(sb.size());
7161 called = false;
7162 boost::asio::async_read_at(s, 0, sb,
7163 boost::asio::transfer_exactly(10),
7164 bindns::bind(async_read_handler,
7165 _1, _2, 10, &called));
7166 ios.reset();
7167 ios.run();
7168 BOOST_ASIO_CHECK(called);
7169 BOOST_ASIO_CHECK(sb.size() == 10);
7170 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
7171
7172 s.reset(read_data, sizeof(read_data));
7173 s.next_read_length(1);
7174 sb.consume(sb.size());
7175 called = false;
7176 boost::asio::async_read_at(s, 1234, sb,
7177 boost::asio::transfer_exactly(10),
7178 bindns::bind(async_read_handler,
7179 _1, _2, 10, &called));
7180 ios.reset();
7181 ios.run();
7182 BOOST_ASIO_CHECK(called);
7183 BOOST_ASIO_CHECK(sb.size() == 10);
7184 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
7185
7186 s.reset(read_data, sizeof(read_data));
7187 s.next_read_length(10);
7188 sb.consume(sb.size());
7189 called = false;
7190 boost::asio::async_read_at(s, 0, sb,
7191 boost::asio::transfer_exactly(10),
7192 bindns::bind(async_read_handler,
7193 _1, _2, 10, &called));
7194 ios.reset();
7195 ios.run();
7196 BOOST_ASIO_CHECK(called);
7197 BOOST_ASIO_CHECK(sb.size() == 10);
7198 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 10));
7199
7200 s.reset(read_data, sizeof(read_data));
7201 s.next_read_length(10);
7202 sb.consume(sb.size());
7203 called = false;
7204 boost::asio::async_read_at(s, 1234, sb,
7205 boost::asio::transfer_exactly(10),
7206 bindns::bind(async_read_handler,
7207 _1, _2, 10, &called));
7208 ios.reset();
7209 ios.run();
7210 BOOST_ASIO_CHECK(called);
7211 BOOST_ASIO_CHECK(sb.size() == 10);
7212 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 10));
7213
7214 s.reset(read_data, sizeof(read_data));
7215 sb.consume(sb.size());
7216 called = false;
7217 boost::asio::async_read_at(s, 0, sb,
7218 boost::asio::transfer_exactly(42),
7219 bindns::bind(async_read_handler,
7220 _1, _2, 42, &called));
7221 ios.reset();
7222 ios.run();
7223 BOOST_ASIO_CHECK(called);
7224 BOOST_ASIO_CHECK(sb.size() == 42);
7225 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
7226
7227 s.reset(read_data, sizeof(read_data));
7228 sb.consume(sb.size());
7229 called = false;
7230 boost::asio::async_read_at(s, 1234, sb,
7231 boost::asio::transfer_exactly(42),
7232 bindns::bind(async_read_handler,
7233 _1, _2, 42, &called));
7234 ios.reset();
7235 ios.run();
7236 BOOST_ASIO_CHECK(called);
7237 BOOST_ASIO_CHECK(sb.size() == 42);
7238 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
7239
7240 s.reset(read_data, sizeof(read_data));
7241 s.next_read_length(1);
7242 sb.consume(sb.size());
7243 called = false;
7244 boost::asio::async_read_at(s, 0, sb,
7245 boost::asio::transfer_exactly(42),
7246 bindns::bind(async_read_handler,
7247 _1, _2, 42, &called));
7248 ios.reset();
7249 ios.run();
7250 BOOST_ASIO_CHECK(called);
7251 BOOST_ASIO_CHECK(sb.size() == 42);
7252 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
7253
7254 s.reset(read_data, sizeof(read_data));
7255 s.next_read_length(1);
7256 sb.consume(sb.size());
7257 called = false;
7258 boost::asio::async_read_at(s, 1234, sb,
7259 boost::asio::transfer_exactly(42),
7260 bindns::bind(async_read_handler,
7261 _1, _2, 42, &called));
7262 ios.reset();
7263 ios.run();
7264 BOOST_ASIO_CHECK(called);
7265 BOOST_ASIO_CHECK(sb.size() == 42);
7266 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
7267
7268 s.reset(read_data, sizeof(read_data));
7269 s.next_read_length(10);
7270 sb.consume(sb.size());
7271 called = false;
7272 boost::asio::async_read_at(s, 0, sb,
7273 boost::asio::transfer_exactly(42),
7274 bindns::bind(async_read_handler,
7275 _1, _2, 42, &called));
7276 ios.reset();
7277 ios.run();
7278 BOOST_ASIO_CHECK(called);
7279 BOOST_ASIO_CHECK(sb.size() == 42);
7280 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), 42));
7281
7282 s.reset(read_data, sizeof(read_data));
7283 s.next_read_length(10);
7284 sb.consume(sb.size());
7285 called = false;
7286 boost::asio::async_read_at(s, 1234, sb,
7287 boost::asio::transfer_exactly(42),
7288 bindns::bind(async_read_handler,
7289 _1, _2, 42, &called));
7290 ios.reset();
7291 ios.run();
7292 BOOST_ASIO_CHECK(called);
7293 BOOST_ASIO_CHECK(sb.size() == 42);
7294 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), 42));
7295
7296 s.reset(read_data, sizeof(read_data));
7297 sb.consume(sb.size());
7298 called = false;
7299 boost::asio::async_read_at(s, 0, sb, old_style_transfer_all,
7300 bindns::bind(async_read_handler,
7301 _1, _2, sizeof(read_data), &called));
7302 ios.reset();
7303 ios.run();
7304 BOOST_ASIO_CHECK(called);
7305 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7306 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7307
7308 s.reset(read_data, sizeof(read_data));
7309 sb.consume(sb.size());
7310 called = false;
7311 boost::asio::async_read_at(s, 1234, sb, old_style_transfer_all,
7312 bindns::bind(async_read_handler,
7313 _1, _2, sizeof(read_data), &called));
7314 ios.reset();
7315 ios.run();
7316 BOOST_ASIO_CHECK(called);
7317 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7318 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7319
7320 s.reset(read_data, sizeof(read_data));
7321 s.next_read_length(1);
7322 sb.consume(sb.size());
7323 called = false;
7324 boost::asio::async_read_at(s, 0, sb, old_style_transfer_all,
7325 bindns::bind(async_read_handler,
7326 _1, _2, sizeof(read_data), &called));
7327 ios.reset();
7328 ios.run();
7329 BOOST_ASIO_CHECK(called);
7330 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7331 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7332
7333 s.reset(read_data, sizeof(read_data));
7334 s.next_read_length(1);
7335 sb.consume(sb.size());
7336 called = false;
7337 boost::asio::async_read_at(s, 1234, sb, old_style_transfer_all,
7338 bindns::bind(async_read_handler,
7339 _1, _2, sizeof(read_data), &called));
7340 ios.reset();
7341 ios.run();
7342 BOOST_ASIO_CHECK(called);
7343 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7344 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7345
7346 s.reset(read_data, sizeof(read_data));
7347 s.next_read_length(10);
7348 sb.consume(sb.size());
7349 called = false;
7350 boost::asio::async_read_at(s, 0, sb, old_style_transfer_all,
7351 bindns::bind(async_read_handler,
7352 _1, _2, sizeof(read_data), &called));
7353 ios.reset();
7354 ios.run();
7355 BOOST_ASIO_CHECK(called);
7356 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7357 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7358
7359 s.reset(read_data, sizeof(read_data));
7360 s.next_read_length(10);
7361 sb.consume(sb.size());
7362 called = false;
7363 boost::asio::async_read_at(s, 1234, sb, old_style_transfer_all,
7364 bindns::bind(async_read_handler,
7365 _1, _2, sizeof(read_data), &called));
7366 ios.reset();
7367 ios.run();
7368 BOOST_ASIO_CHECK(called);
7369 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7370 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7371
7372 s.reset(read_data, sizeof(read_data));
7373 sb.consume(sb.size());
7374 called = false;
7375 boost::asio::async_read_at(s, 0, sb, short_transfer,
7376 bindns::bind(async_read_handler,
7377 _1, _2, sizeof(read_data), &called));
7378 ios.reset();
7379 ios.run();
7380 BOOST_ASIO_CHECK(called);
7381 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7382 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7383
7384 s.reset(read_data, sizeof(read_data));
7385 sb.consume(sb.size());
7386 called = false;
7387 boost::asio::async_read_at(s, 1234, sb, short_transfer,
7388 bindns::bind(async_read_handler,
7389 _1, _2, sizeof(read_data), &called));
7390 ios.reset();
7391 ios.run();
7392 BOOST_ASIO_CHECK(called);
7393 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7394 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7395
7396 s.reset(read_data, sizeof(read_data));
7397 s.next_read_length(1);
7398 sb.consume(sb.size());
7399 called = false;
7400 boost::asio::async_read_at(s, 0, sb, short_transfer,
7401 bindns::bind(async_read_handler,
7402 _1, _2, sizeof(read_data), &called));
7403 ios.reset();
7404 ios.run();
7405 BOOST_ASIO_CHECK(called);
7406 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7407 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7408
7409 s.reset(read_data, sizeof(read_data));
7410 s.next_read_length(1);
7411 sb.consume(sb.size());
7412 called = false;
7413 boost::asio::async_read_at(s, 1234, sb, short_transfer,
7414 bindns::bind(async_read_handler,
7415 _1, _2, sizeof(read_data), &called));
7416 ios.reset();
7417 ios.run();
7418 BOOST_ASIO_CHECK(called);
7419 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7420 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7421
7422 s.reset(read_data, sizeof(read_data));
7423 s.next_read_length(10);
7424 sb.consume(sb.size());
7425 called = false;
7426 boost::asio::async_read_at(s, 0, sb, short_transfer,
7427 bindns::bind(async_read_handler,
7428 _1, _2, sizeof(read_data), &called));
7429 ios.reset();
7430 ios.run();
7431 BOOST_ASIO_CHECK(called);
7432 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7433 BOOST_ASIO_CHECK(s.check_buffers(0, sb.data(), sizeof(read_data)));
7434
7435 s.reset(read_data, sizeof(read_data));
7436 s.next_read_length(10);
7437 sb.consume(sb.size());
7438 called = false;
7439 boost::asio::async_read_at(s, 1234, sb, short_transfer,
7440 bindns::bind(async_read_handler,
7441 _1, _2, sizeof(read_data), &called));
7442 ios.reset();
7443 ios.run();
7444 BOOST_ASIO_CHECK(called);
7445 BOOST_ASIO_CHECK(sb.size() == sizeof(read_data));
7446 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7447
7448 s.reset(read_data, sizeof(read_data));
7449 sb.consume(sb.size());
7450 int i = boost::asio::async_read_at(s, 1234, sb,
7451 short_transfer, archetypes::lazy_handler());
7452 BOOST_ASIO_CHECK(i == 42);
7453 ios.reset();
7454 ios.run();
7455 BOOST_ASIO_CHECK(s.check_buffers(1234, sb.data(), sizeof(read_data)));
7456 }
7457
7458 BOOST_ASIO_TEST_SUITE
7459 (
7460 "read_at",
7461 BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffers_1_read_at)
7462 BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_read_at)
7463 BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_read_at)
7464 BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_mutable_buffers_1_read_at)
7465 BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_vector_buffers_read_at)
7466 BOOST_ASIO_TEST_CASE(test_4_arg_nothrow_streambuf_read_at)
7467 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffers_1_read_at)
7468 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_read_at)
7469 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_read_at)
7470 BOOST_ASIO_TEST_CASE(test_5_arg_mutable_buffers_1_read_at)
7471 BOOST_ASIO_TEST_CASE(test_5_arg_vector_buffers_read_at)
7472 BOOST_ASIO_TEST_CASE(test_5_arg_streambuf_read_at)
7473 BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffers_1_async_read_at)
7474 BOOST_ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_read_at)
7475 BOOST_ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_read_at)
7476 BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_async_read_at)
7477 BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_async_read_at)
7478 BOOST_ASIO_TEST_CASE(test_5_arg_mutable_buffers_1_async_read_at)
7479 BOOST_ASIO_TEST_CASE(test_5_arg_boost_array_buffers_async_read_at)
7480 BOOST_ASIO_TEST_CASE(test_5_arg_std_array_buffers_async_read_at)
7481 BOOST_ASIO_TEST_CASE(test_5_arg_vector_buffers_async_read_at)
7482 BOOST_ASIO_TEST_CASE(test_5_arg_streambuf_async_read_at)
7483 )
7484