PageRenderTime 89ms CodeModel.GetById 34ms RepoModel.GetById 1ms app.codeStats 0ms

/test/write.cpp

https://bitbucket.org/boostorg/asio
C++ | 3914 lines | 3466 code | 437 blank | 11 comment | 203 complexity | 46442eaafa875daa55ca7f61598e5a2f MD5 | raw file
  1. //
  2. // write.cpp
  3. // ~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2016 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. // Disable autolinking for unit tests.
  11. #if !defined(BOOST_ALL_NO_LIB)
  12. #define BOOST_ALL_NO_LIB 1
  13. #endif // !defined(BOOST_ALL_NO_LIB)
  14. // Test that header file is self-contained.
  15. #include <boost/asio/write.hpp>
  16. #include <cstring>
  17. #include <vector>
  18. #include "archetypes/async_result.hpp"
  19. #include <boost/asio/io_service.hpp>
  20. #include <boost/asio/streambuf.hpp>
  21. #include "unit_test.hpp"
  22. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  23. # include <boost/bind.hpp>
  24. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  25. # include <functional>
  26. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  27. #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  28. #include <boost/array.hpp>
  29. #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  30. #if defined(BOOST_ASIO_HAS_STD_ARRAY)
  31. # include <array>
  32. #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
  33. using namespace std; // For memcmp, memcpy and memset.
  34. class test_stream
  35. {
  36. public:
  37. typedef boost::asio::io_service io_service_type;
  38. test_stream(boost::asio::io_service& io_service)
  39. : io_service_(io_service),
  40. length_(max_length),
  41. position_(0),
  42. next_write_length_(max_length)
  43. {
  44. memset(data_, 0, max_length);
  45. }
  46. io_service_type& get_io_service()
  47. {
  48. return io_service_;
  49. }
  50. void reset(size_t length = max_length)
  51. {
  52. BOOST_ASIO_CHECK(length <= max_length);
  53. memset(data_, 0, max_length);
  54. length_ = length;
  55. position_ = 0;
  56. next_write_length_ = length;
  57. }
  58. void next_write_length(size_t length)
  59. {
  60. next_write_length_ = length;
  61. }
  62. template <typename Const_Buffers>
  63. bool check_buffers(const Const_Buffers& buffers, size_t length)
  64. {
  65. if (length != position_)
  66. return false;
  67. typename Const_Buffers::const_iterator iter = buffers.begin();
  68. typename Const_Buffers::const_iterator end = buffers.end();
  69. size_t checked_length = 0;
  70. for (; iter != end && checked_length < length; ++iter)
  71. {
  72. size_t buffer_length = boost::asio::buffer_size(*iter);
  73. if (buffer_length > length - checked_length)
  74. buffer_length = length - checked_length;
  75. if (memcmp(data_ + checked_length,
  76. boost::asio::buffer_cast<const void*>(*iter), buffer_length) != 0)
  77. return false;
  78. checked_length += buffer_length;
  79. }
  80. return true;
  81. }
  82. template <typename Const_Buffers>
  83. size_t write_some(const Const_Buffers& buffers)
  84. {
  85. size_t n = boost::asio::buffer_copy(
  86. boost::asio::buffer(data_, length_) + position_,
  87. buffers, next_write_length_);
  88. position_ += n;
  89. return n;
  90. }
  91. template <typename Const_Buffers>
  92. size_t write_some(const Const_Buffers& buffers, boost::system::error_code& ec)
  93. {
  94. ec = boost::system::error_code();
  95. return write_some(buffers);
  96. }
  97. template <typename Const_Buffers, typename Handler>
  98. void async_write_some(const Const_Buffers& buffers, Handler handler)
  99. {
  100. size_t bytes_transferred = write_some(buffers);
  101. io_service_.post(boost::asio::detail::bind_handler(
  102. handler, boost::system::error_code(), bytes_transferred));
  103. }
  104. private:
  105. io_service_type& io_service_;
  106. enum { max_length = 8192 };
  107. char data_[max_length];
  108. size_t length_;
  109. size_t position_;
  110. size_t next_write_length_;
  111. };
  112. static const char write_data[]
  113. = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  114. static char mutable_write_data[]
  115. = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  116. void test_2_arg_zero_buffers_write()
  117. {
  118. boost::asio::io_service ios;
  119. test_stream s(ios);
  120. std::vector<boost::asio::const_buffer> buffers;
  121. size_t bytes_transferred = boost::asio::write(s, buffers);
  122. BOOST_ASIO_CHECK(bytes_transferred == 0);
  123. }
  124. void test_2_arg_const_buffers_1_write()
  125. {
  126. boost::asio::io_service ios;
  127. test_stream s(ios);
  128. boost::asio::const_buffers_1 buffers
  129. = boost::asio::buffer(write_data, sizeof(write_data));
  130. s.reset();
  131. size_t bytes_transferred = boost::asio::write(s, buffers);
  132. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  133. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  134. s.reset();
  135. s.next_write_length(1);
  136. bytes_transferred = boost::asio::write(s, buffers);
  137. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  138. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  139. s.reset();
  140. s.next_write_length(10);
  141. bytes_transferred = boost::asio::write(s, buffers);
  142. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  143. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  144. }
  145. void test_2_arg_mutable_buffers_1_write()
  146. {
  147. boost::asio::io_service ios;
  148. test_stream s(ios);
  149. boost::asio::mutable_buffers_1 buffers
  150. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  151. s.reset();
  152. size_t bytes_transferred = boost::asio::write(s, buffers);
  153. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  154. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  155. s.reset();
  156. s.next_write_length(1);
  157. bytes_transferred = boost::asio::write(s, buffers);
  158. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  159. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  160. s.reset();
  161. s.next_write_length(10);
  162. bytes_transferred = boost::asio::write(s, buffers);
  163. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  164. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  165. }
  166. void test_2_arg_vector_buffers_write()
  167. {
  168. boost::asio::io_service ios;
  169. test_stream s(ios);
  170. std::vector<boost::asio::const_buffer> buffers;
  171. buffers.push_back(boost::asio::buffer(write_data, 32));
  172. buffers.push_back(boost::asio::buffer(write_data) + 32);
  173. s.reset();
  174. size_t bytes_transferred = boost::asio::write(s, buffers);
  175. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  176. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  177. s.reset();
  178. s.next_write_length(1);
  179. bytes_transferred = boost::asio::write(s, buffers);
  180. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  181. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  182. s.reset();
  183. s.next_write_length(10);
  184. bytes_transferred = boost::asio::write(s, buffers);
  185. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  186. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  187. }
  188. void test_3_arg_nothrow_zero_buffers_write()
  189. {
  190. boost::asio::io_service ios;
  191. test_stream s(ios);
  192. std::vector<boost::asio::const_buffer> buffers;
  193. boost::system::error_code error;
  194. size_t bytes_transferred = boost::asio::write(s, buffers, error);
  195. BOOST_ASIO_CHECK(bytes_transferred == 0);
  196. BOOST_ASIO_CHECK(!error);
  197. }
  198. void test_3_arg_nothrow_const_buffers_1_write()
  199. {
  200. boost::asio::io_service ios;
  201. test_stream s(ios);
  202. boost::asio::const_buffers_1 buffers
  203. = boost::asio::buffer(write_data, sizeof(write_data));
  204. s.reset();
  205. boost::system::error_code error;
  206. size_t bytes_transferred = boost::asio::write(s, buffers, error);
  207. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  208. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  209. BOOST_ASIO_CHECK(!error);
  210. s.reset();
  211. s.next_write_length(1);
  212. bytes_transferred = boost::asio::write(s, buffers, error);
  213. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  214. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  215. BOOST_ASIO_CHECK(!error);
  216. s.reset();
  217. s.next_write_length(10);
  218. bytes_transferred = boost::asio::write(s, buffers, error);
  219. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  220. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  221. BOOST_ASIO_CHECK(!error);
  222. }
  223. void test_3_arg_nothrow_mutable_buffers_1_write()
  224. {
  225. boost::asio::io_service ios;
  226. test_stream s(ios);
  227. boost::asio::mutable_buffers_1 buffers
  228. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  229. s.reset();
  230. boost::system::error_code error;
  231. size_t bytes_transferred = boost::asio::write(s, buffers, error);
  232. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  233. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  234. BOOST_ASIO_CHECK(!error);
  235. s.reset();
  236. s.next_write_length(1);
  237. bytes_transferred = boost::asio::write(s, buffers, error);
  238. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  239. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  240. BOOST_ASIO_CHECK(!error);
  241. s.reset();
  242. s.next_write_length(10);
  243. bytes_transferred = boost::asio::write(s, buffers, error);
  244. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  245. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  246. BOOST_ASIO_CHECK(!error);
  247. }
  248. void test_3_arg_nothrow_vector_buffers_write()
  249. {
  250. boost::asio::io_service ios;
  251. test_stream s(ios);
  252. std::vector<boost::asio::const_buffer> buffers;
  253. buffers.push_back(boost::asio::buffer(write_data, 32));
  254. buffers.push_back(boost::asio::buffer(write_data) + 32);
  255. s.reset();
  256. boost::system::error_code error;
  257. size_t bytes_transferred = boost::asio::write(s, buffers, error);
  258. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  259. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  260. BOOST_ASIO_CHECK(!error);
  261. s.reset();
  262. s.next_write_length(1);
  263. bytes_transferred = boost::asio::write(s, buffers, error);
  264. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  265. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  266. BOOST_ASIO_CHECK(!error);
  267. s.reset();
  268. s.next_write_length(10);
  269. bytes_transferred = boost::asio::write(s, buffers, error);
  270. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  271. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  272. BOOST_ASIO_CHECK(!error);
  273. }
  274. bool old_style_transfer_all(const boost::system::error_code& ec,
  275. size_t /*bytes_transferred*/)
  276. {
  277. return !!ec;
  278. }
  279. size_t short_transfer(const boost::system::error_code& ec,
  280. size_t /*bytes_transferred*/)
  281. {
  282. return !!ec ? 0 : 3;
  283. }
  284. void test_3_arg_const_buffers_1_write()
  285. {
  286. boost::asio::io_service ios;
  287. test_stream s(ios);
  288. boost::asio::const_buffers_1 buffers
  289. = boost::asio::buffer(write_data, sizeof(write_data));
  290. s.reset();
  291. size_t bytes_transferred = boost::asio::write(s, buffers,
  292. boost::asio::transfer_all());
  293. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  294. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  295. s.reset();
  296. s.next_write_length(1);
  297. bytes_transferred = boost::asio::write(s, buffers,
  298. boost::asio::transfer_all());
  299. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  300. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  301. s.reset();
  302. s.next_write_length(10);
  303. bytes_transferred = boost::asio::write(s, buffers,
  304. boost::asio::transfer_all());
  305. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  306. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  307. s.reset();
  308. bytes_transferred = boost::asio::write(s, buffers,
  309. boost::asio::transfer_at_least(1));
  310. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  311. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  312. s.reset();
  313. s.next_write_length(1);
  314. bytes_transferred = boost::asio::write(s, buffers,
  315. boost::asio::transfer_at_least(1));
  316. BOOST_ASIO_CHECK(bytes_transferred == 1);
  317. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  318. s.reset();
  319. s.next_write_length(10);
  320. bytes_transferred = boost::asio::write(s, buffers,
  321. boost::asio::transfer_at_least(1));
  322. BOOST_ASIO_CHECK(bytes_transferred == 10);
  323. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  324. s.reset();
  325. bytes_transferred = boost::asio::write(s, buffers,
  326. boost::asio::transfer_at_least(10));
  327. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  328. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  329. s.reset();
  330. s.next_write_length(1);
  331. bytes_transferred = boost::asio::write(s, buffers,
  332. boost::asio::transfer_at_least(10));
  333. BOOST_ASIO_CHECK(bytes_transferred == 10);
  334. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  335. s.reset();
  336. s.next_write_length(10);
  337. bytes_transferred = boost::asio::write(s, buffers,
  338. boost::asio::transfer_at_least(10));
  339. BOOST_ASIO_CHECK(bytes_transferred == 10);
  340. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  341. s.reset();
  342. bytes_transferred = boost::asio::write(s, buffers,
  343. boost::asio::transfer_at_least(42));
  344. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  345. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  346. s.reset();
  347. s.next_write_length(1);
  348. bytes_transferred = boost::asio::write(s, buffers,
  349. boost::asio::transfer_at_least(42));
  350. BOOST_ASIO_CHECK(bytes_transferred == 42);
  351. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  352. s.reset();
  353. s.next_write_length(10);
  354. bytes_transferred = boost::asio::write(s, buffers,
  355. boost::asio::transfer_at_least(42));
  356. BOOST_ASIO_CHECK(bytes_transferred == 50);
  357. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  358. s.reset();
  359. bytes_transferred = boost::asio::write(s, buffers,
  360. boost::asio::transfer_exactly(1));
  361. BOOST_ASIO_CHECK(bytes_transferred == 1);
  362. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  363. s.reset();
  364. s.next_write_length(1);
  365. bytes_transferred = boost::asio::write(s, buffers,
  366. boost::asio::transfer_exactly(1));
  367. BOOST_ASIO_CHECK(bytes_transferred == 1);
  368. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  369. s.reset();
  370. s.next_write_length(10);
  371. bytes_transferred = boost::asio::write(s, buffers,
  372. boost::asio::transfer_exactly(1));
  373. BOOST_ASIO_CHECK(bytes_transferred == 1);
  374. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  375. s.reset();
  376. bytes_transferred = boost::asio::write(s, buffers,
  377. boost::asio::transfer_exactly(10));
  378. BOOST_ASIO_CHECK(bytes_transferred == 10);
  379. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  380. s.reset();
  381. s.next_write_length(1);
  382. bytes_transferred = boost::asio::write(s, buffers,
  383. boost::asio::transfer_exactly(10));
  384. BOOST_ASIO_CHECK(bytes_transferred == 10);
  385. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  386. s.reset();
  387. s.next_write_length(10);
  388. bytes_transferred = boost::asio::write(s, buffers,
  389. boost::asio::transfer_exactly(10));
  390. BOOST_ASIO_CHECK(bytes_transferred == 10);
  391. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  392. s.reset();
  393. bytes_transferred = boost::asio::write(s, buffers,
  394. boost::asio::transfer_exactly(42));
  395. BOOST_ASIO_CHECK(bytes_transferred == 42);
  396. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  397. s.reset();
  398. s.next_write_length(1);
  399. bytes_transferred = boost::asio::write(s, buffers,
  400. boost::asio::transfer_exactly(42));
  401. BOOST_ASIO_CHECK(bytes_transferred == 42);
  402. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  403. s.reset();
  404. s.next_write_length(10);
  405. bytes_transferred = boost::asio::write(s, buffers,
  406. boost::asio::transfer_exactly(42));
  407. BOOST_ASIO_CHECK(bytes_transferred == 42);
  408. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  409. s.reset();
  410. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  411. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  412. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  413. s.reset();
  414. s.next_write_length(1);
  415. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  416. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  417. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  418. s.reset();
  419. s.next_write_length(10);
  420. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  421. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  422. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  423. s.reset();
  424. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  425. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  426. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  427. s.reset();
  428. s.next_write_length(1);
  429. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  430. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  431. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  432. s.reset();
  433. s.next_write_length(10);
  434. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  435. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  436. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  437. }
  438. void test_3_arg_mutable_buffers_1_write()
  439. {
  440. boost::asio::io_service ios;
  441. test_stream s(ios);
  442. boost::asio::mutable_buffers_1 buffers
  443. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  444. s.reset();
  445. size_t bytes_transferred = boost::asio::write(s, buffers,
  446. boost::asio::transfer_all());
  447. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  448. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  449. s.reset();
  450. s.next_write_length(1);
  451. bytes_transferred = boost::asio::write(s, buffers,
  452. boost::asio::transfer_all());
  453. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  454. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  455. s.reset();
  456. s.next_write_length(10);
  457. bytes_transferred = boost::asio::write(s, buffers,
  458. boost::asio::transfer_all());
  459. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  460. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  461. s.reset();
  462. bytes_transferred = boost::asio::write(s, buffers,
  463. boost::asio::transfer_at_least(1));
  464. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  465. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  466. s.reset();
  467. s.next_write_length(1);
  468. bytes_transferred = boost::asio::write(s, buffers,
  469. boost::asio::transfer_at_least(1));
  470. BOOST_ASIO_CHECK(bytes_transferred == 1);
  471. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  472. s.reset();
  473. s.next_write_length(10);
  474. bytes_transferred = boost::asio::write(s, buffers,
  475. boost::asio::transfer_at_least(1));
  476. BOOST_ASIO_CHECK(bytes_transferred == 10);
  477. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  478. s.reset();
  479. bytes_transferred = boost::asio::write(s, buffers,
  480. boost::asio::transfer_at_least(10));
  481. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  482. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  483. s.reset();
  484. s.next_write_length(1);
  485. bytes_transferred = boost::asio::write(s, buffers,
  486. boost::asio::transfer_at_least(10));
  487. BOOST_ASIO_CHECK(bytes_transferred == 10);
  488. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  489. s.reset();
  490. s.next_write_length(10);
  491. bytes_transferred = boost::asio::write(s, buffers,
  492. boost::asio::transfer_at_least(10));
  493. BOOST_ASIO_CHECK(bytes_transferred == 10);
  494. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  495. s.reset();
  496. bytes_transferred = boost::asio::write(s, buffers,
  497. boost::asio::transfer_at_least(42));
  498. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  499. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  500. s.reset();
  501. s.next_write_length(1);
  502. bytes_transferred = boost::asio::write(s, buffers,
  503. boost::asio::transfer_at_least(42));
  504. BOOST_ASIO_CHECK(bytes_transferred == 42);
  505. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  506. s.reset();
  507. s.next_write_length(10);
  508. bytes_transferred = boost::asio::write(s, buffers,
  509. boost::asio::transfer_at_least(42));
  510. BOOST_ASIO_CHECK(bytes_transferred == 50);
  511. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  512. s.reset();
  513. bytes_transferred = boost::asio::write(s, buffers,
  514. boost::asio::transfer_exactly(1));
  515. BOOST_ASIO_CHECK(bytes_transferred == 1);
  516. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  517. s.reset();
  518. s.next_write_length(1);
  519. bytes_transferred = boost::asio::write(s, buffers,
  520. boost::asio::transfer_exactly(1));
  521. BOOST_ASIO_CHECK(bytes_transferred == 1);
  522. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  523. s.reset();
  524. s.next_write_length(10);
  525. bytes_transferred = boost::asio::write(s, buffers,
  526. boost::asio::transfer_exactly(1));
  527. BOOST_ASIO_CHECK(bytes_transferred == 1);
  528. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  529. s.reset();
  530. bytes_transferred = boost::asio::write(s, buffers,
  531. boost::asio::transfer_exactly(10));
  532. BOOST_ASIO_CHECK(bytes_transferred == 10);
  533. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  534. s.reset();
  535. s.next_write_length(1);
  536. bytes_transferred = boost::asio::write(s, buffers,
  537. boost::asio::transfer_exactly(10));
  538. BOOST_ASIO_CHECK(bytes_transferred == 10);
  539. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  540. s.reset();
  541. s.next_write_length(10);
  542. bytes_transferred = boost::asio::write(s, buffers,
  543. boost::asio::transfer_exactly(10));
  544. BOOST_ASIO_CHECK(bytes_transferred == 10);
  545. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  546. s.reset();
  547. bytes_transferred = boost::asio::write(s, buffers,
  548. boost::asio::transfer_exactly(42));
  549. BOOST_ASIO_CHECK(bytes_transferred == 42);
  550. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  551. s.reset();
  552. s.next_write_length(1);
  553. bytes_transferred = boost::asio::write(s, buffers,
  554. boost::asio::transfer_exactly(42));
  555. BOOST_ASIO_CHECK(bytes_transferred == 42);
  556. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  557. s.reset();
  558. s.next_write_length(10);
  559. bytes_transferred = boost::asio::write(s, buffers,
  560. boost::asio::transfer_exactly(42));
  561. BOOST_ASIO_CHECK(bytes_transferred == 42);
  562. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  563. s.reset();
  564. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  565. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  566. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  567. s.reset();
  568. s.next_write_length(1);
  569. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  570. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  571. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  572. s.reset();
  573. s.next_write_length(10);
  574. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  575. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  576. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  577. s.reset();
  578. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  579. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  580. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  581. s.reset();
  582. s.next_write_length(1);
  583. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  584. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  585. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  586. s.reset();
  587. s.next_write_length(10);
  588. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  589. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  590. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  591. }
  592. void test_3_arg_vector_buffers_write()
  593. {
  594. boost::asio::io_service ios;
  595. test_stream s(ios);
  596. std::vector<boost::asio::const_buffer> buffers;
  597. buffers.push_back(boost::asio::buffer(write_data, 32));
  598. buffers.push_back(boost::asio::buffer(write_data) + 32);
  599. s.reset();
  600. size_t bytes_transferred = boost::asio::write(s, buffers,
  601. boost::asio::transfer_all());
  602. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  603. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  604. s.reset();
  605. s.next_write_length(1);
  606. bytes_transferred = boost::asio::write(s, buffers,
  607. boost::asio::transfer_all());
  608. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  609. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  610. s.reset();
  611. s.next_write_length(10);
  612. bytes_transferred = boost::asio::write(s, buffers,
  613. boost::asio::transfer_all());
  614. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  615. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  616. s.reset();
  617. bytes_transferred = boost::asio::write(s, buffers,
  618. boost::asio::transfer_at_least(1));
  619. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  620. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  621. s.reset();
  622. s.next_write_length(1);
  623. bytes_transferred = boost::asio::write(s, buffers,
  624. boost::asio::transfer_at_least(1));
  625. BOOST_ASIO_CHECK(bytes_transferred == 1);
  626. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  627. s.reset();
  628. s.next_write_length(10);
  629. bytes_transferred = boost::asio::write(s, buffers,
  630. boost::asio::transfer_at_least(1));
  631. BOOST_ASIO_CHECK(bytes_transferred == 10);
  632. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  633. s.reset();
  634. bytes_transferred = boost::asio::write(s, buffers,
  635. boost::asio::transfer_at_least(10));
  636. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  637. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  638. s.reset();
  639. s.next_write_length(1);
  640. bytes_transferred = boost::asio::write(s, buffers,
  641. boost::asio::transfer_at_least(10));
  642. BOOST_ASIO_CHECK(bytes_transferred == 10);
  643. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  644. s.reset();
  645. s.next_write_length(10);
  646. bytes_transferred = boost::asio::write(s, buffers,
  647. boost::asio::transfer_at_least(10));
  648. BOOST_ASIO_CHECK(bytes_transferred == 10);
  649. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  650. s.reset();
  651. bytes_transferred = boost::asio::write(s, buffers,
  652. boost::asio::transfer_at_least(42));
  653. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  654. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  655. s.reset();
  656. s.next_write_length(1);
  657. bytes_transferred = boost::asio::write(s, buffers,
  658. boost::asio::transfer_at_least(42));
  659. BOOST_ASIO_CHECK(bytes_transferred == 42);
  660. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  661. s.reset();
  662. s.next_write_length(10);
  663. bytes_transferred = boost::asio::write(s, buffers,
  664. boost::asio::transfer_at_least(42));
  665. BOOST_ASIO_CHECK(bytes_transferred == 50);
  666. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  667. s.reset();
  668. bytes_transferred = boost::asio::write(s, buffers,
  669. boost::asio::transfer_exactly(1));
  670. BOOST_ASIO_CHECK(bytes_transferred == 1);
  671. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  672. s.reset();
  673. s.next_write_length(1);
  674. bytes_transferred = boost::asio::write(s, buffers,
  675. boost::asio::transfer_exactly(1));
  676. BOOST_ASIO_CHECK(bytes_transferred == 1);
  677. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  678. s.reset();
  679. s.next_write_length(10);
  680. bytes_transferred = boost::asio::write(s, buffers,
  681. boost::asio::transfer_exactly(1));
  682. BOOST_ASIO_CHECK(bytes_transferred == 1);
  683. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  684. s.reset();
  685. bytes_transferred = boost::asio::write(s, buffers,
  686. boost::asio::transfer_exactly(10));
  687. BOOST_ASIO_CHECK(bytes_transferred == 10);
  688. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  689. s.reset();
  690. s.next_write_length(1);
  691. bytes_transferred = boost::asio::write(s, buffers,
  692. boost::asio::transfer_exactly(10));
  693. BOOST_ASIO_CHECK(bytes_transferred == 10);
  694. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  695. s.reset();
  696. s.next_write_length(10);
  697. bytes_transferred = boost::asio::write(s, buffers,
  698. boost::asio::transfer_exactly(10));
  699. BOOST_ASIO_CHECK(bytes_transferred == 10);
  700. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  701. s.reset();
  702. bytes_transferred = boost::asio::write(s, buffers,
  703. boost::asio::transfer_exactly(42));
  704. BOOST_ASIO_CHECK(bytes_transferred == 42);
  705. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  706. s.reset();
  707. s.next_write_length(1);
  708. bytes_transferred = boost::asio::write(s, buffers,
  709. boost::asio::transfer_exactly(42));
  710. BOOST_ASIO_CHECK(bytes_transferred == 42);
  711. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  712. s.reset();
  713. s.next_write_length(10);
  714. bytes_transferred = boost::asio::write(s, buffers,
  715. boost::asio::transfer_exactly(42));
  716. BOOST_ASIO_CHECK(bytes_transferred == 42);
  717. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  718. s.reset();
  719. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  720. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  721. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  722. s.reset();
  723. s.next_write_length(1);
  724. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  725. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  726. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  727. s.reset();
  728. s.next_write_length(10);
  729. bytes_transferred = boost::asio::write(s, buffers, old_style_transfer_all);
  730. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  731. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  732. s.reset();
  733. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  734. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  735. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  736. s.reset();
  737. s.next_write_length(1);
  738. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  739. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  740. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  741. s.reset();
  742. s.next_write_length(10);
  743. bytes_transferred = boost::asio::write(s, buffers, short_transfer);
  744. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  745. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  746. }
  747. void test_4_arg_const_buffers_1_write()
  748. {
  749. boost::asio::io_service ios;
  750. test_stream s(ios);
  751. boost::asio::const_buffers_1 buffers
  752. = boost::asio::buffer(write_data, sizeof(write_data));
  753. s.reset();
  754. boost::system::error_code error;
  755. size_t bytes_transferred = boost::asio::write(s, buffers,
  756. boost::asio::transfer_all(), error);
  757. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  758. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  759. BOOST_ASIO_CHECK(!error);
  760. s.reset();
  761. s.next_write_length(1);
  762. error = boost::system::error_code();
  763. bytes_transferred = boost::asio::write(s, buffers,
  764. boost::asio::transfer_all(), error);
  765. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  766. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  767. BOOST_ASIO_CHECK(!error);
  768. s.reset();
  769. s.next_write_length(10);
  770. error = boost::system::error_code();
  771. bytes_transferred = boost::asio::write(s, buffers,
  772. boost::asio::transfer_all(), error);
  773. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  774. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  775. BOOST_ASIO_CHECK(!error);
  776. s.reset();
  777. error = boost::system::error_code();
  778. bytes_transferred = boost::asio::write(s, buffers,
  779. boost::asio::transfer_at_least(1), error);
  780. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  781. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  782. BOOST_ASIO_CHECK(!error);
  783. s.reset();
  784. s.next_write_length(1);
  785. error = boost::system::error_code();
  786. bytes_transferred = boost::asio::write(s, buffers,
  787. boost::asio::transfer_at_least(1), error);
  788. BOOST_ASIO_CHECK(bytes_transferred == 1);
  789. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  790. BOOST_ASIO_CHECK(!error);
  791. s.reset();
  792. s.next_write_length(10);
  793. error = boost::system::error_code();
  794. bytes_transferred = boost::asio::write(s, buffers,
  795. boost::asio::transfer_at_least(1), error);
  796. BOOST_ASIO_CHECK(bytes_transferred == 10);
  797. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  798. BOOST_ASIO_CHECK(!error);
  799. s.reset();
  800. error = boost::system::error_code();
  801. bytes_transferred = boost::asio::write(s, buffers,
  802. boost::asio::transfer_at_least(10), error);
  803. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  804. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  805. BOOST_ASIO_CHECK(!error);
  806. s.reset();
  807. s.next_write_length(1);
  808. error = boost::system::error_code();
  809. bytes_transferred = boost::asio::write(s, buffers,
  810. boost::asio::transfer_at_least(10), error);
  811. BOOST_ASIO_CHECK(bytes_transferred == 10);
  812. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  813. BOOST_ASIO_CHECK(!error);
  814. s.reset();
  815. s.next_write_length(10);
  816. error = boost::system::error_code();
  817. bytes_transferred = boost::asio::write(s, buffers,
  818. boost::asio::transfer_at_least(10), error);
  819. BOOST_ASIO_CHECK(bytes_transferred == 10);
  820. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  821. BOOST_ASIO_CHECK(!error);
  822. s.reset();
  823. error = boost::system::error_code();
  824. bytes_transferred = boost::asio::write(s, buffers,
  825. boost::asio::transfer_at_least(42), error);
  826. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  827. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  828. BOOST_ASIO_CHECK(!error);
  829. s.reset();
  830. s.next_write_length(1);
  831. error = boost::system::error_code();
  832. bytes_transferred = boost::asio::write(s, buffers,
  833. boost::asio::transfer_at_least(42), error);
  834. BOOST_ASIO_CHECK(bytes_transferred == 42);
  835. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  836. BOOST_ASIO_CHECK(!error);
  837. s.reset();
  838. s.next_write_length(10);
  839. error = boost::system::error_code();
  840. bytes_transferred = boost::asio::write(s, buffers,
  841. boost::asio::transfer_at_least(42), error);
  842. BOOST_ASIO_CHECK(bytes_transferred == 50);
  843. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  844. BOOST_ASIO_CHECK(!error);
  845. s.reset();
  846. error = boost::system::error_code();
  847. bytes_transferred = boost::asio::write(s, buffers,
  848. boost::asio::transfer_exactly(1), error);
  849. BOOST_ASIO_CHECK(bytes_transferred == 1);
  850. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  851. BOOST_ASIO_CHECK(!error);
  852. s.reset();
  853. s.next_write_length(1);
  854. error = boost::system::error_code();
  855. bytes_transferred = boost::asio::write(s, buffers,
  856. boost::asio::transfer_exactly(1), error);
  857. BOOST_ASIO_CHECK(bytes_transferred == 1);
  858. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  859. BOOST_ASIO_CHECK(!error);
  860. s.reset();
  861. s.next_write_length(10);
  862. error = boost::system::error_code();
  863. bytes_transferred = boost::asio::write(s, buffers,
  864. boost::asio::transfer_exactly(1), error);
  865. BOOST_ASIO_CHECK(bytes_transferred == 1);
  866. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  867. BOOST_ASIO_CHECK(!error);
  868. s.reset();
  869. error = boost::system::error_code();
  870. bytes_transferred = boost::asio::write(s, buffers,
  871. boost::asio::transfer_exactly(10), error);
  872. BOOST_ASIO_CHECK(bytes_transferred == 10);
  873. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  874. BOOST_ASIO_CHECK(!error);
  875. s.reset();
  876. s.next_write_length(1);
  877. error = boost::system::error_code();
  878. bytes_transferred = boost::asio::write(s, buffers,
  879. boost::asio::transfer_exactly(10), error);
  880. BOOST_ASIO_CHECK(bytes_transferred == 10);
  881. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  882. BOOST_ASIO_CHECK(!error);
  883. s.reset();
  884. s.next_write_length(10);
  885. error = boost::system::error_code();
  886. bytes_transferred = boost::asio::write(s, buffers,
  887. boost::asio::transfer_exactly(10), error);
  888. BOOST_ASIO_CHECK(bytes_transferred == 10);
  889. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  890. BOOST_ASIO_CHECK(!error);
  891. s.reset();
  892. error = boost::system::error_code();
  893. bytes_transferred = boost::asio::write(s, buffers,
  894. boost::asio::transfer_exactly(42), error);
  895. BOOST_ASIO_CHECK(bytes_transferred == 42);
  896. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  897. BOOST_ASIO_CHECK(!error);
  898. s.reset();
  899. s.next_write_length(1);
  900. error = boost::system::error_code();
  901. bytes_transferred = boost::asio::write(s, buffers,
  902. boost::asio::transfer_exactly(42), error);
  903. BOOST_ASIO_CHECK(bytes_transferred == 42);
  904. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  905. BOOST_ASIO_CHECK(!error);
  906. s.reset();
  907. s.next_write_length(10);
  908. error = boost::system::error_code();
  909. bytes_transferred = boost::asio::write(s, buffers,
  910. boost::asio::transfer_exactly(42), error);
  911. BOOST_ASIO_CHECK(bytes_transferred == 42);
  912. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  913. BOOST_ASIO_CHECK(!error);
  914. s.reset();
  915. bytes_transferred = boost::asio::write(s, buffers,
  916. old_style_transfer_all, error);
  917. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  918. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  919. BOOST_ASIO_CHECK(!error);
  920. s.reset();
  921. s.next_write_length(1);
  922. error = boost::system::error_code();
  923. bytes_transferred = boost::asio::write(s, buffers,
  924. old_style_transfer_all, error);
  925. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  926. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  927. BOOST_ASIO_CHECK(!error);
  928. s.reset();
  929. s.next_write_length(10);
  930. error = boost::system::error_code();
  931. bytes_transferred = boost::asio::write(s, buffers,
  932. old_style_transfer_all, error);
  933. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  934. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  935. BOOST_ASIO_CHECK(!error);
  936. s.reset();
  937. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  938. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  939. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  940. BOOST_ASIO_CHECK(!error);
  941. s.reset();
  942. s.next_write_length(1);
  943. error = boost::system::error_code();
  944. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  945. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  946. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  947. BOOST_ASIO_CHECK(!error);
  948. s.reset();
  949. s.next_write_length(10);
  950. error = boost::system::error_code();
  951. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  952. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  953. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  954. BOOST_ASIO_CHECK(!error);
  955. }
  956. void test_4_arg_mutable_buffers_1_write()
  957. {
  958. boost::asio::io_service ios;
  959. test_stream s(ios);
  960. boost::asio::mutable_buffers_1 buffers
  961. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  962. s.reset();
  963. boost::system::error_code error;
  964. size_t bytes_transferred = boost::asio::write(s, buffers,
  965. boost::asio::transfer_all(), error);
  966. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  967. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  968. BOOST_ASIO_CHECK(!error);
  969. s.reset();
  970. s.next_write_length(1);
  971. error = boost::system::error_code();
  972. bytes_transferred = boost::asio::write(s, buffers,
  973. boost::asio::transfer_all(), error);
  974. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  975. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  976. BOOST_ASIO_CHECK(!error);
  977. s.reset();
  978. s.next_write_length(10);
  979. error = boost::system::error_code();
  980. bytes_transferred = boost::asio::write(s, buffers,
  981. boost::asio::transfer_all(), error);
  982. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  983. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  984. BOOST_ASIO_CHECK(!error);
  985. s.reset();
  986. error = boost::system::error_code();
  987. bytes_transferred = boost::asio::write(s, buffers,
  988. boost::asio::transfer_at_least(1), error);
  989. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  990. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  991. BOOST_ASIO_CHECK(!error);
  992. s.reset();
  993. s.next_write_length(1);
  994. error = boost::system::error_code();
  995. bytes_transferred = boost::asio::write(s, buffers,
  996. boost::asio::transfer_at_least(1), error);
  997. BOOST_ASIO_CHECK(bytes_transferred == 1);
  998. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  999. BOOST_ASIO_CHECK(!error);
  1000. s.reset();
  1001. s.next_write_length(10);
  1002. error = boost::system::error_code();
  1003. bytes_transferred = boost::asio::write(s, buffers,
  1004. boost::asio::transfer_at_least(1), error);
  1005. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1006. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1007. BOOST_ASIO_CHECK(!error);
  1008. s.reset();
  1009. error = boost::system::error_code();
  1010. bytes_transferred = boost::asio::write(s, buffers,
  1011. boost::asio::transfer_at_least(10), error);
  1012. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1013. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1014. BOOST_ASIO_CHECK(!error);
  1015. s.reset();
  1016. s.next_write_length(1);
  1017. error = boost::system::error_code();
  1018. bytes_transferred = boost::asio::write(s, buffers,
  1019. boost::asio::transfer_at_least(10), error);
  1020. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1021. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1022. BOOST_ASIO_CHECK(!error);
  1023. s.reset();
  1024. s.next_write_length(10);
  1025. error = boost::system::error_code();
  1026. bytes_transferred = boost::asio::write(s, buffers,
  1027. boost::asio::transfer_at_least(10), error);
  1028. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1029. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1030. BOOST_ASIO_CHECK(!error);
  1031. s.reset();
  1032. error = boost::system::error_code();
  1033. bytes_transferred = boost::asio::write(s, buffers,
  1034. boost::asio::transfer_at_least(42), error);
  1035. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1036. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1037. BOOST_ASIO_CHECK(!error);
  1038. s.reset();
  1039. s.next_write_length(1);
  1040. error = boost::system::error_code();
  1041. bytes_transferred = boost::asio::write(s, buffers,
  1042. boost::asio::transfer_at_least(42), error);
  1043. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1044. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1045. BOOST_ASIO_CHECK(!error);
  1046. s.reset();
  1047. s.next_write_length(10);
  1048. error = boost::system::error_code();
  1049. bytes_transferred = boost::asio::write(s, buffers,
  1050. boost::asio::transfer_at_least(42), error);
  1051. BOOST_ASIO_CHECK(bytes_transferred == 50);
  1052. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  1053. BOOST_ASIO_CHECK(!error);
  1054. s.reset();
  1055. error = boost::system::error_code();
  1056. bytes_transferred = boost::asio::write(s, buffers,
  1057. boost::asio::transfer_exactly(1), error);
  1058. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1059. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1060. BOOST_ASIO_CHECK(!error);
  1061. s.reset();
  1062. s.next_write_length(1);
  1063. error = boost::system::error_code();
  1064. bytes_transferred = boost::asio::write(s, buffers,
  1065. boost::asio::transfer_exactly(1), error);
  1066. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1067. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1068. BOOST_ASIO_CHECK(!error);
  1069. s.reset();
  1070. s.next_write_length(10);
  1071. error = boost::system::error_code();
  1072. bytes_transferred = boost::asio::write(s, buffers,
  1073. boost::asio::transfer_exactly(1), error);
  1074. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1075. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1076. BOOST_ASIO_CHECK(!error);
  1077. s.reset();
  1078. error = boost::system::error_code();
  1079. bytes_transferred = boost::asio::write(s, buffers,
  1080. boost::asio::transfer_exactly(10), error);
  1081. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1082. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1083. BOOST_ASIO_CHECK(!error);
  1084. s.reset();
  1085. s.next_write_length(1);
  1086. error = boost::system::error_code();
  1087. bytes_transferred = boost::asio::write(s, buffers,
  1088. boost::asio::transfer_exactly(10), error);
  1089. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1090. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1091. BOOST_ASIO_CHECK(!error);
  1092. s.reset();
  1093. s.next_write_length(10);
  1094. error = boost::system::error_code();
  1095. bytes_transferred = boost::asio::write(s, buffers,
  1096. boost::asio::transfer_exactly(10), error);
  1097. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1098. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1099. BOOST_ASIO_CHECK(!error);
  1100. s.reset();
  1101. error = boost::system::error_code();
  1102. bytes_transferred = boost::asio::write(s, buffers,
  1103. boost::asio::transfer_exactly(42), error);
  1104. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1105. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1106. BOOST_ASIO_CHECK(!error);
  1107. s.reset();
  1108. s.next_write_length(1);
  1109. error = boost::system::error_code();
  1110. bytes_transferred = boost::asio::write(s, buffers,
  1111. boost::asio::transfer_exactly(42), error);
  1112. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1113. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1114. BOOST_ASIO_CHECK(!error);
  1115. s.reset();
  1116. s.next_write_length(10);
  1117. error = boost::system::error_code();
  1118. bytes_transferred = boost::asio::write(s, buffers,
  1119. boost::asio::transfer_exactly(42), error);
  1120. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1121. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1122. BOOST_ASIO_CHECK(!error);
  1123. s.reset();
  1124. bytes_transferred = boost::asio::write(s, buffers,
  1125. old_style_transfer_all, error);
  1126. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1127. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1128. BOOST_ASIO_CHECK(!error);
  1129. s.reset();
  1130. s.next_write_length(1);
  1131. error = boost::system::error_code();
  1132. bytes_transferred = boost::asio::write(s, buffers,
  1133. old_style_transfer_all, error);
  1134. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1135. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1136. BOOST_ASIO_CHECK(!error);
  1137. s.reset();
  1138. s.next_write_length(10);
  1139. error = boost::system::error_code();
  1140. bytes_transferred = boost::asio::write(s, buffers,
  1141. old_style_transfer_all, error);
  1142. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1143. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1144. BOOST_ASIO_CHECK(!error);
  1145. s.reset();
  1146. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  1147. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1148. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1149. BOOST_ASIO_CHECK(!error);
  1150. s.reset();
  1151. s.next_write_length(1);
  1152. error = boost::system::error_code();
  1153. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  1154. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1155. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1156. BOOST_ASIO_CHECK(!error);
  1157. s.reset();
  1158. s.next_write_length(10);
  1159. error = boost::system::error_code();
  1160. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  1161. BOOST_ASIO_CHECK(bytes_transferred == sizeof(mutable_write_data));
  1162. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1163. BOOST_ASIO_CHECK(!error);
  1164. }
  1165. void test_4_arg_vector_buffers_write()
  1166. {
  1167. boost::asio::io_service ios;
  1168. test_stream s(ios);
  1169. std::vector<boost::asio::const_buffer> buffers;
  1170. buffers.push_back(boost::asio::buffer(write_data, 32));
  1171. buffers.push_back(boost::asio::buffer(write_data) + 32);
  1172. s.reset();
  1173. boost::system::error_code error;
  1174. size_t bytes_transferred = boost::asio::write(s, buffers,
  1175. boost::asio::transfer_all(), error);
  1176. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1177. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1178. BOOST_ASIO_CHECK(!error);
  1179. s.reset();
  1180. s.next_write_length(1);
  1181. error = boost::system::error_code();
  1182. bytes_transferred = boost::asio::write(s, buffers,
  1183. boost::asio::transfer_all(), error);
  1184. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1185. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1186. BOOST_ASIO_CHECK(!error);
  1187. s.reset();
  1188. s.next_write_length(10);
  1189. error = boost::system::error_code();
  1190. bytes_transferred = boost::asio::write(s, buffers,
  1191. boost::asio::transfer_all(), error);
  1192. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1193. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1194. BOOST_ASIO_CHECK(!error);
  1195. s.reset();
  1196. error = boost::system::error_code();
  1197. bytes_transferred = boost::asio::write(s, buffers,
  1198. boost::asio::transfer_at_least(1), error);
  1199. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1200. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1201. BOOST_ASIO_CHECK(!error);
  1202. s.reset();
  1203. s.next_write_length(1);
  1204. error = boost::system::error_code();
  1205. bytes_transferred = boost::asio::write(s, buffers,
  1206. boost::asio::transfer_at_least(1), error);
  1207. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1208. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1209. BOOST_ASIO_CHECK(!error);
  1210. s.reset();
  1211. s.next_write_length(10);
  1212. error = boost::system::error_code();
  1213. bytes_transferred = boost::asio::write(s, buffers,
  1214. boost::asio::transfer_at_least(1), error);
  1215. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1216. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1217. BOOST_ASIO_CHECK(!error);
  1218. s.reset();
  1219. error = boost::system::error_code();
  1220. bytes_transferred = boost::asio::write(s, buffers,
  1221. boost::asio::transfer_at_least(10), error);
  1222. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1223. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1224. BOOST_ASIO_CHECK(!error);
  1225. s.reset();
  1226. s.next_write_length(1);
  1227. error = boost::system::error_code();
  1228. bytes_transferred = boost::asio::write(s, buffers,
  1229. boost::asio::transfer_at_least(10), error);
  1230. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1231. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1232. BOOST_ASIO_CHECK(!error);
  1233. s.reset();
  1234. s.next_write_length(10);
  1235. error = boost::system::error_code();
  1236. bytes_transferred = boost::asio::write(s, buffers,
  1237. boost::asio::transfer_at_least(10), error);
  1238. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1239. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1240. BOOST_ASIO_CHECK(!error);
  1241. s.reset();
  1242. error = boost::system::error_code();
  1243. bytes_transferred = boost::asio::write(s, buffers,
  1244. boost::asio::transfer_at_least(42), error);
  1245. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1246. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1247. BOOST_ASIO_CHECK(!error);
  1248. s.reset();
  1249. s.next_write_length(1);
  1250. error = boost::system::error_code();
  1251. bytes_transferred = boost::asio::write(s, buffers,
  1252. boost::asio::transfer_at_least(42), error);
  1253. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1254. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1255. BOOST_ASIO_CHECK(!error);
  1256. s.reset();
  1257. s.next_write_length(10);
  1258. error = boost::system::error_code();
  1259. bytes_transferred = boost::asio::write(s, buffers,
  1260. boost::asio::transfer_at_least(42), error);
  1261. BOOST_ASIO_CHECK(bytes_transferred == 50);
  1262. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  1263. BOOST_ASIO_CHECK(!error);
  1264. s.reset();
  1265. error = boost::system::error_code();
  1266. bytes_transferred = boost::asio::write(s, buffers,
  1267. boost::asio::transfer_exactly(1), error);
  1268. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1269. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1270. BOOST_ASIO_CHECK(!error);
  1271. s.reset();
  1272. s.next_write_length(1);
  1273. error = boost::system::error_code();
  1274. bytes_transferred = boost::asio::write(s, buffers,
  1275. boost::asio::transfer_exactly(1), error);
  1276. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1277. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1278. BOOST_ASIO_CHECK(!error);
  1279. s.reset();
  1280. s.next_write_length(10);
  1281. error = boost::system::error_code();
  1282. bytes_transferred = boost::asio::write(s, buffers,
  1283. boost::asio::transfer_exactly(1), error);
  1284. BOOST_ASIO_CHECK(bytes_transferred == 1);
  1285. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1286. BOOST_ASIO_CHECK(!error);
  1287. s.reset();
  1288. error = boost::system::error_code();
  1289. bytes_transferred = boost::asio::write(s, buffers,
  1290. boost::asio::transfer_exactly(10), error);
  1291. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1292. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1293. BOOST_ASIO_CHECK(!error);
  1294. s.reset();
  1295. s.next_write_length(1);
  1296. error = boost::system::error_code();
  1297. bytes_transferred = boost::asio::write(s, buffers,
  1298. boost::asio::transfer_exactly(10), error);
  1299. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1300. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1301. BOOST_ASIO_CHECK(!error);
  1302. s.reset();
  1303. s.next_write_length(10);
  1304. error = boost::system::error_code();
  1305. bytes_transferred = boost::asio::write(s, buffers,
  1306. boost::asio::transfer_exactly(10), error);
  1307. BOOST_ASIO_CHECK(bytes_transferred == 10);
  1308. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1309. BOOST_ASIO_CHECK(!error);
  1310. s.reset();
  1311. error = boost::system::error_code();
  1312. bytes_transferred = boost::asio::write(s, buffers,
  1313. boost::asio::transfer_exactly(42), error);
  1314. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1315. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1316. BOOST_ASIO_CHECK(!error);
  1317. s.reset();
  1318. s.next_write_length(1);
  1319. error = boost::system::error_code();
  1320. bytes_transferred = boost::asio::write(s, buffers,
  1321. boost::asio::transfer_exactly(42), error);
  1322. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1323. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1324. BOOST_ASIO_CHECK(!error);
  1325. s.reset();
  1326. s.next_write_length(10);
  1327. error = boost::system::error_code();
  1328. bytes_transferred = boost::asio::write(s, buffers,
  1329. boost::asio::transfer_exactly(42), error);
  1330. BOOST_ASIO_CHECK(bytes_transferred == 42);
  1331. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1332. BOOST_ASIO_CHECK(!error);
  1333. s.reset();
  1334. bytes_transferred = boost::asio::write(s, buffers,
  1335. old_style_transfer_all, error);
  1336. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1337. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1338. BOOST_ASIO_CHECK(!error);
  1339. s.reset();
  1340. s.next_write_length(1);
  1341. error = boost::system::error_code();
  1342. bytes_transferred = boost::asio::write(s, buffers,
  1343. old_style_transfer_all, error);
  1344. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1345. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1346. BOOST_ASIO_CHECK(!error);
  1347. s.reset();
  1348. s.next_write_length(10);
  1349. error = boost::system::error_code();
  1350. bytes_transferred = boost::asio::write(s, buffers,
  1351. old_style_transfer_all, error);
  1352. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1353. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1354. BOOST_ASIO_CHECK(!error);
  1355. s.reset();
  1356. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  1357. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1358. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1359. BOOST_ASIO_CHECK(!error);
  1360. s.reset();
  1361. s.next_write_length(1);
  1362. error = boost::system::error_code();
  1363. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  1364. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1365. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1366. BOOST_ASIO_CHECK(!error);
  1367. s.reset();
  1368. s.next_write_length(10);
  1369. error = boost::system::error_code();
  1370. bytes_transferred = boost::asio::write(s, buffers, short_transfer, error);
  1371. BOOST_ASIO_CHECK(bytes_transferred == sizeof(write_data));
  1372. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1373. BOOST_ASIO_CHECK(!error);
  1374. }
  1375. void async_write_handler(const boost::system::error_code& e,
  1376. size_t bytes_transferred, size_t expected_bytes_transferred, bool* called)
  1377. {
  1378. *called = true;
  1379. BOOST_ASIO_CHECK(!e);
  1380. BOOST_ASIO_CHECK(bytes_transferred == expected_bytes_transferred);
  1381. }
  1382. void test_3_arg_const_buffers_1_async_write()
  1383. {
  1384. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  1385. namespace bindns = boost;
  1386. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1387. namespace bindns = std;
  1388. using std::placeholders::_1;
  1389. using std::placeholders::_2;
  1390. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1391. boost::asio::io_service ios;
  1392. test_stream s(ios);
  1393. boost::asio::const_buffers_1 buffers
  1394. = boost::asio::buffer(write_data, sizeof(write_data));
  1395. s.reset();
  1396. bool called = false;
  1397. boost::asio::async_write(s, buffers,
  1398. bindns::bind(async_write_handler,
  1399. _1, _2, sizeof(write_data), &called));
  1400. ios.reset();
  1401. ios.run();
  1402. BOOST_ASIO_CHECK(called);
  1403. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1404. s.reset();
  1405. s.next_write_length(1);
  1406. called = false;
  1407. boost::asio::async_write(s, buffers,
  1408. bindns::bind(async_write_handler,
  1409. _1, _2, sizeof(write_data), &called));
  1410. ios.reset();
  1411. ios.run();
  1412. BOOST_ASIO_CHECK(called);
  1413. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1414. s.reset();
  1415. s.next_write_length(10);
  1416. called = false;
  1417. boost::asio::async_write(s, buffers,
  1418. bindns::bind(async_write_handler,
  1419. _1, _2, sizeof(write_data), &called));
  1420. ios.reset();
  1421. ios.run();
  1422. BOOST_ASIO_CHECK(called);
  1423. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1424. s.reset();
  1425. int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
  1426. BOOST_ASIO_CHECK(i == 42);
  1427. ios.reset();
  1428. ios.run();
  1429. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1430. }
  1431. void test_3_arg_mutable_buffers_1_async_write()
  1432. {
  1433. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  1434. namespace bindns = boost;
  1435. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1436. namespace bindns = std;
  1437. using std::placeholders::_1;
  1438. using std::placeholders::_2;
  1439. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1440. boost::asio::io_service ios;
  1441. test_stream s(ios);
  1442. boost::asio::mutable_buffers_1 buffers
  1443. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  1444. s.reset();
  1445. bool called = false;
  1446. boost::asio::async_write(s, buffers,
  1447. bindns::bind(async_write_handler,
  1448. _1, _2, sizeof(mutable_write_data), &called));
  1449. ios.reset();
  1450. ios.run();
  1451. BOOST_ASIO_CHECK(called);
  1452. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1453. s.reset();
  1454. s.next_write_length(1);
  1455. called = false;
  1456. boost::asio::async_write(s, buffers,
  1457. bindns::bind(async_write_handler,
  1458. _1, _2, sizeof(mutable_write_data), &called));
  1459. ios.reset();
  1460. ios.run();
  1461. BOOST_ASIO_CHECK(called);
  1462. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1463. s.reset();
  1464. s.next_write_length(10);
  1465. called = false;
  1466. boost::asio::async_write(s, buffers,
  1467. bindns::bind(async_write_handler,
  1468. _1, _2, sizeof(mutable_write_data), &called));
  1469. ios.reset();
  1470. ios.run();
  1471. BOOST_ASIO_CHECK(called);
  1472. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1473. s.reset();
  1474. int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
  1475. BOOST_ASIO_CHECK(i == 42);
  1476. ios.reset();
  1477. ios.run();
  1478. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1479. }
  1480. void test_3_arg_boost_array_buffers_async_write()
  1481. {
  1482. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  1483. namespace bindns = boost;
  1484. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1485. namespace bindns = std;
  1486. using std::placeholders::_1;
  1487. using std::placeholders::_2;
  1488. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1489. #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  1490. boost::asio::io_service ios;
  1491. test_stream s(ios);
  1492. boost::array<boost::asio::const_buffer, 2> buffers = { {
  1493. boost::asio::buffer(write_data, 32),
  1494. boost::asio::buffer(write_data) + 32 } };
  1495. s.reset();
  1496. bool called = false;
  1497. boost::asio::async_write(s, buffers,
  1498. bindns::bind(async_write_handler,
  1499. _1, _2, sizeof(write_data), &called));
  1500. ios.reset();
  1501. ios.run();
  1502. BOOST_ASIO_CHECK(called);
  1503. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1504. s.reset();
  1505. s.next_write_length(1);
  1506. called = false;
  1507. boost::asio::async_write(s, buffers,
  1508. bindns::bind(async_write_handler,
  1509. _1, _2, sizeof(write_data), &called));
  1510. ios.reset();
  1511. ios.run();
  1512. BOOST_ASIO_CHECK(called);
  1513. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1514. s.reset();
  1515. s.next_write_length(10);
  1516. called = false;
  1517. boost::asio::async_write(s, buffers,
  1518. bindns::bind(async_write_handler,
  1519. _1, _2, sizeof(write_data), &called));
  1520. ios.reset();
  1521. ios.run();
  1522. BOOST_ASIO_CHECK(called);
  1523. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1524. s.reset();
  1525. int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
  1526. BOOST_ASIO_CHECK(i == 42);
  1527. ios.reset();
  1528. ios.run();
  1529. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1530. #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  1531. }
  1532. void test_3_arg_std_array_buffers_async_write()
  1533. {
  1534. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  1535. namespace bindns = boost;
  1536. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1537. namespace bindns = std;
  1538. using std::placeholders::_1;
  1539. using std::placeholders::_2;
  1540. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1541. #if defined(BOOST_ASIO_HAS_STD_ARRAY)
  1542. boost::asio::io_service ios;
  1543. test_stream s(ios);
  1544. std::array<boost::asio::const_buffer, 2> buffers = { {
  1545. boost::asio::buffer(write_data, 32),
  1546. boost::asio::buffer(write_data) + 32 } };
  1547. s.reset();
  1548. bool called = false;
  1549. boost::asio::async_write(s, buffers,
  1550. bindns::bind(async_write_handler,
  1551. _1, _2, sizeof(write_data), &called));
  1552. ios.reset();
  1553. ios.run();
  1554. BOOST_ASIO_CHECK(called);
  1555. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1556. s.reset();
  1557. s.next_write_length(1);
  1558. called = false;
  1559. boost::asio::async_write(s, buffers,
  1560. bindns::bind(async_write_handler,
  1561. _1, _2, sizeof(write_data), &called));
  1562. ios.reset();
  1563. ios.run();
  1564. BOOST_ASIO_CHECK(called);
  1565. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1566. s.reset();
  1567. s.next_write_length(10);
  1568. called = false;
  1569. boost::asio::async_write(s, buffers,
  1570. bindns::bind(async_write_handler,
  1571. _1, _2, sizeof(write_data), &called));
  1572. ios.reset();
  1573. ios.run();
  1574. BOOST_ASIO_CHECK(called);
  1575. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1576. s.reset();
  1577. int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
  1578. BOOST_ASIO_CHECK(i == 42);
  1579. ios.reset();
  1580. ios.run();
  1581. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1582. #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
  1583. }
  1584. void test_3_arg_vector_buffers_async_write()
  1585. {
  1586. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  1587. namespace bindns = boost;
  1588. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1589. namespace bindns = std;
  1590. using std::placeholders::_1;
  1591. using std::placeholders::_2;
  1592. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1593. boost::asio::io_service ios;
  1594. test_stream s(ios);
  1595. std::vector<boost::asio::const_buffer> buffers;
  1596. buffers.push_back(boost::asio::buffer(write_data, 32));
  1597. buffers.push_back(boost::asio::buffer(write_data) + 32);
  1598. s.reset();
  1599. bool called = false;
  1600. boost::asio::async_write(s, buffers,
  1601. bindns::bind(async_write_handler,
  1602. _1, _2, sizeof(write_data), &called));
  1603. ios.reset();
  1604. ios.run();
  1605. BOOST_ASIO_CHECK(called);
  1606. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1607. s.reset();
  1608. s.next_write_length(1);
  1609. called = false;
  1610. boost::asio::async_write(s, buffers,
  1611. bindns::bind(async_write_handler,
  1612. _1, _2, sizeof(write_data), &called));
  1613. ios.reset();
  1614. ios.run();
  1615. BOOST_ASIO_CHECK(called);
  1616. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1617. s.reset();
  1618. s.next_write_length(10);
  1619. called = false;
  1620. boost::asio::async_write(s, buffers,
  1621. bindns::bind(async_write_handler,
  1622. _1, _2, sizeof(write_data), &called));
  1623. ios.reset();
  1624. ios.run();
  1625. BOOST_ASIO_CHECK(called);
  1626. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1627. s.reset();
  1628. int i = boost::asio::async_write(s, buffers, archetypes::lazy_handler());
  1629. BOOST_ASIO_CHECK(i == 42);
  1630. ios.reset();
  1631. ios.run();
  1632. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1633. }
  1634. void test_3_arg_streambuf_async_write()
  1635. {
  1636. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  1637. namespace bindns = boost;
  1638. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1639. namespace bindns = std;
  1640. using std::placeholders::_1;
  1641. using std::placeholders::_2;
  1642. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1643. boost::asio::io_service ios;
  1644. test_stream s(ios);
  1645. boost::asio::streambuf sb;
  1646. boost::asio::const_buffers_1 buffers
  1647. = boost::asio::buffer(write_data, sizeof(write_data));
  1648. s.reset();
  1649. sb.consume(sb.size());
  1650. sb.sputn(write_data, sizeof(write_data));
  1651. bool called = false;
  1652. boost::asio::async_write(s, sb,
  1653. bindns::bind(async_write_handler,
  1654. _1, _2, sizeof(write_data), &called));
  1655. ios.reset();
  1656. ios.run();
  1657. BOOST_ASIO_CHECK(called);
  1658. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1659. s.reset();
  1660. sb.consume(sb.size());
  1661. sb.sputn(write_data, sizeof(write_data));
  1662. s.next_write_length(1);
  1663. called = false;
  1664. boost::asio::async_write(s, sb,
  1665. bindns::bind(async_write_handler,
  1666. _1, _2, sizeof(write_data), &called));
  1667. ios.reset();
  1668. ios.run();
  1669. BOOST_ASIO_CHECK(called);
  1670. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1671. s.reset();
  1672. sb.consume(sb.size());
  1673. sb.sputn(write_data, sizeof(write_data));
  1674. s.next_write_length(10);
  1675. called = false;
  1676. boost::asio::async_write(s, sb,
  1677. bindns::bind(async_write_handler,
  1678. _1, _2, sizeof(write_data), &called));
  1679. ios.reset();
  1680. ios.run();
  1681. BOOST_ASIO_CHECK(called);
  1682. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1683. s.reset();
  1684. sb.consume(sb.size());
  1685. sb.sputn(write_data, sizeof(write_data));
  1686. int i = boost::asio::async_write(s, sb, archetypes::lazy_handler());
  1687. BOOST_ASIO_CHECK(i == 42);
  1688. ios.reset();
  1689. ios.run();
  1690. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1691. }
  1692. void test_4_arg_const_buffers_1_async_write()
  1693. {
  1694. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  1695. namespace bindns = boost;
  1696. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1697. namespace bindns = std;
  1698. using std::placeholders::_1;
  1699. using std::placeholders::_2;
  1700. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1701. boost::asio::io_service ios;
  1702. test_stream s(ios);
  1703. boost::asio::const_buffers_1 buffers
  1704. = boost::asio::buffer(write_data, sizeof(write_data));
  1705. s.reset();
  1706. bool called = false;
  1707. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  1708. bindns::bind(async_write_handler,
  1709. _1, _2, sizeof(write_data), &called));
  1710. ios.reset();
  1711. ios.run();
  1712. BOOST_ASIO_CHECK(called);
  1713. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1714. s.reset();
  1715. s.next_write_length(1);
  1716. called = false;
  1717. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  1718. bindns::bind(async_write_handler,
  1719. _1, _2, sizeof(write_data), &called));
  1720. ios.reset();
  1721. ios.run();
  1722. BOOST_ASIO_CHECK(called);
  1723. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1724. s.reset();
  1725. s.next_write_length(10);
  1726. called = false;
  1727. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  1728. bindns::bind(async_write_handler,
  1729. _1, _2, sizeof(write_data), &called));
  1730. ios.reset();
  1731. ios.run();
  1732. BOOST_ASIO_CHECK(called);
  1733. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1734. s.reset();
  1735. called = false;
  1736. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  1737. bindns::bind(async_write_handler,
  1738. _1, _2, sizeof(write_data), &called));
  1739. ios.reset();
  1740. ios.run();
  1741. BOOST_ASIO_CHECK(called);
  1742. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1743. s.reset();
  1744. s.next_write_length(1);
  1745. called = false;
  1746. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  1747. bindns::bind(async_write_handler,
  1748. _1, _2, 1, &called));
  1749. ios.reset();
  1750. ios.run();
  1751. BOOST_ASIO_CHECK(called);
  1752. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1753. s.reset();
  1754. s.next_write_length(10);
  1755. called = false;
  1756. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  1757. bindns::bind(async_write_handler,
  1758. _1, _2, 10, &called));
  1759. ios.reset();
  1760. ios.run();
  1761. BOOST_ASIO_CHECK(called);
  1762. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1763. s.reset();
  1764. called = false;
  1765. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  1766. bindns::bind(async_write_handler,
  1767. _1, _2, sizeof(write_data), &called));
  1768. ios.reset();
  1769. ios.run();
  1770. BOOST_ASIO_CHECK(called);
  1771. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1772. s.reset();
  1773. s.next_write_length(1);
  1774. called = false;
  1775. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  1776. bindns::bind(async_write_handler,
  1777. _1, _2, 10, &called));
  1778. ios.reset();
  1779. ios.run();
  1780. BOOST_ASIO_CHECK(called);
  1781. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1782. s.reset();
  1783. s.next_write_length(10);
  1784. called = false;
  1785. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  1786. bindns::bind(async_write_handler,
  1787. _1, _2, 10, &called));
  1788. ios.reset();
  1789. ios.run();
  1790. BOOST_ASIO_CHECK(called);
  1791. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1792. s.reset();
  1793. called = false;
  1794. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  1795. bindns::bind(async_write_handler,
  1796. _1, _2, sizeof(write_data), &called));
  1797. ios.reset();
  1798. ios.run();
  1799. BOOST_ASIO_CHECK(called);
  1800. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1801. s.reset();
  1802. s.next_write_length(1);
  1803. called = false;
  1804. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  1805. bindns::bind(async_write_handler,
  1806. _1, _2, 42, &called));
  1807. ios.reset();
  1808. ios.run();
  1809. BOOST_ASIO_CHECK(called);
  1810. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1811. s.reset();
  1812. s.next_write_length(10);
  1813. called = false;
  1814. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  1815. bindns::bind(async_write_handler,
  1816. _1, _2, 50, &called));
  1817. ios.reset();
  1818. ios.run();
  1819. BOOST_ASIO_CHECK(called);
  1820. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  1821. s.reset();
  1822. called = false;
  1823. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  1824. bindns::bind(async_write_handler,
  1825. _1, _2, 1, &called));
  1826. ios.reset();
  1827. ios.run();
  1828. BOOST_ASIO_CHECK(called);
  1829. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1830. s.reset();
  1831. s.next_write_length(1);
  1832. called = false;
  1833. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  1834. bindns::bind(async_write_handler,
  1835. _1, _2, 1, &called));
  1836. ios.reset();
  1837. ios.run();
  1838. BOOST_ASIO_CHECK(called);
  1839. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1840. s.reset();
  1841. s.next_write_length(10);
  1842. called = false;
  1843. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  1844. bindns::bind(async_write_handler,
  1845. _1, _2, 1, &called));
  1846. ios.reset();
  1847. ios.run();
  1848. BOOST_ASIO_CHECK(called);
  1849. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  1850. s.reset();
  1851. called = false;
  1852. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  1853. bindns::bind(async_write_handler,
  1854. _1, _2, 10, &called));
  1855. ios.reset();
  1856. ios.run();
  1857. BOOST_ASIO_CHECK(called);
  1858. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1859. s.reset();
  1860. s.next_write_length(1);
  1861. called = false;
  1862. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  1863. bindns::bind(async_write_handler,
  1864. _1, _2, 10, &called));
  1865. ios.reset();
  1866. ios.run();
  1867. BOOST_ASIO_CHECK(called);
  1868. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1869. s.reset();
  1870. s.next_write_length(10);
  1871. called = false;
  1872. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  1873. bindns::bind(async_write_handler,
  1874. _1, _2, 10, &called));
  1875. ios.reset();
  1876. ios.run();
  1877. BOOST_ASIO_CHECK(called);
  1878. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  1879. s.reset();
  1880. called = false;
  1881. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  1882. bindns::bind(async_write_handler,
  1883. _1, _2, 42, &called));
  1884. ios.reset();
  1885. ios.run();
  1886. BOOST_ASIO_CHECK(called);
  1887. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1888. s.reset();
  1889. s.next_write_length(1);
  1890. called = false;
  1891. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  1892. bindns::bind(async_write_handler,
  1893. _1, _2, 42, &called));
  1894. ios.reset();
  1895. ios.run();
  1896. BOOST_ASIO_CHECK(called);
  1897. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1898. s.reset();
  1899. s.next_write_length(10);
  1900. called = false;
  1901. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  1902. bindns::bind(async_write_handler,
  1903. _1, _2, 42, &called));
  1904. ios.reset();
  1905. ios.run();
  1906. BOOST_ASIO_CHECK(called);
  1907. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  1908. s.reset();
  1909. called = false;
  1910. boost::asio::async_write(s, buffers, old_style_transfer_all,
  1911. bindns::bind(async_write_handler,
  1912. _1, _2, sizeof(write_data), &called));
  1913. ios.reset();
  1914. ios.run();
  1915. BOOST_ASIO_CHECK(called);
  1916. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1917. s.reset();
  1918. s.next_write_length(1);
  1919. called = false;
  1920. boost::asio::async_write(s, buffers, old_style_transfer_all,
  1921. bindns::bind(async_write_handler,
  1922. _1, _2, sizeof(write_data), &called));
  1923. ios.reset();
  1924. ios.run();
  1925. BOOST_ASIO_CHECK(called);
  1926. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1927. s.reset();
  1928. s.next_write_length(10);
  1929. called = false;
  1930. boost::asio::async_write(s, buffers, old_style_transfer_all,
  1931. bindns::bind(async_write_handler,
  1932. _1, _2, sizeof(write_data), &called));
  1933. ios.reset();
  1934. ios.run();
  1935. BOOST_ASIO_CHECK(called);
  1936. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1937. s.reset();
  1938. called = false;
  1939. boost::asio::async_write(s, buffers, short_transfer,
  1940. bindns::bind(async_write_handler,
  1941. _1, _2, sizeof(write_data), &called));
  1942. ios.reset();
  1943. ios.run();
  1944. BOOST_ASIO_CHECK(called);
  1945. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1946. s.reset();
  1947. s.next_write_length(1);
  1948. called = false;
  1949. boost::asio::async_write(s, buffers, short_transfer,
  1950. bindns::bind(async_write_handler,
  1951. _1, _2, sizeof(write_data), &called));
  1952. ios.reset();
  1953. ios.run();
  1954. BOOST_ASIO_CHECK(called);
  1955. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1956. s.reset();
  1957. s.next_write_length(10);
  1958. called = false;
  1959. boost::asio::async_write(s, buffers, short_transfer,
  1960. bindns::bind(async_write_handler,
  1961. _1, _2, sizeof(write_data), &called));
  1962. ios.reset();
  1963. ios.run();
  1964. BOOST_ASIO_CHECK(called);
  1965. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1966. s.reset();
  1967. int i = boost::asio::async_write(s, buffers, short_transfer,
  1968. archetypes::lazy_handler());
  1969. BOOST_ASIO_CHECK(i == 42);
  1970. ios.reset();
  1971. ios.run();
  1972. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  1973. }
  1974. void test_4_arg_mutable_buffers_1_async_write()
  1975. {
  1976. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  1977. namespace bindns = boost;
  1978. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1979. namespace bindns = std;
  1980. using std::placeholders::_1;
  1981. using std::placeholders::_2;
  1982. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  1983. boost::asio::io_service ios;
  1984. test_stream s(ios);
  1985. boost::asio::mutable_buffers_1 buffers
  1986. = boost::asio::buffer(mutable_write_data, sizeof(mutable_write_data));
  1987. s.reset();
  1988. bool called = false;
  1989. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  1990. bindns::bind(async_write_handler,
  1991. _1, _2, sizeof(mutable_write_data), &called));
  1992. ios.reset();
  1993. ios.run();
  1994. BOOST_ASIO_CHECK(called);
  1995. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  1996. s.reset();
  1997. s.next_write_length(1);
  1998. called = false;
  1999. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2000. bindns::bind(async_write_handler,
  2001. _1, _2, sizeof(mutable_write_data), &called));
  2002. ios.reset();
  2003. ios.run();
  2004. BOOST_ASIO_CHECK(called);
  2005. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2006. s.reset();
  2007. s.next_write_length(10);
  2008. called = false;
  2009. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2010. bindns::bind(async_write_handler,
  2011. _1, _2, sizeof(mutable_write_data), &called));
  2012. ios.reset();
  2013. ios.run();
  2014. BOOST_ASIO_CHECK(called);
  2015. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2016. s.reset();
  2017. called = false;
  2018. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2019. bindns::bind(async_write_handler,
  2020. _1, _2, sizeof(mutable_write_data), &called));
  2021. ios.reset();
  2022. ios.run();
  2023. BOOST_ASIO_CHECK(called);
  2024. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2025. s.reset();
  2026. s.next_write_length(1);
  2027. called = false;
  2028. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2029. bindns::bind(async_write_handler,
  2030. _1, _2, 1, &called));
  2031. ios.reset();
  2032. ios.run();
  2033. BOOST_ASIO_CHECK(called);
  2034. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2035. s.reset();
  2036. s.next_write_length(10);
  2037. called = false;
  2038. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2039. bindns::bind(async_write_handler,
  2040. _1, _2, 10, &called));
  2041. ios.reset();
  2042. ios.run();
  2043. BOOST_ASIO_CHECK(called);
  2044. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2045. s.reset();
  2046. called = false;
  2047. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2048. bindns::bind(async_write_handler,
  2049. _1, _2, sizeof(mutable_write_data), &called));
  2050. ios.reset();
  2051. ios.run();
  2052. BOOST_ASIO_CHECK(called);
  2053. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2054. s.reset();
  2055. s.next_write_length(1);
  2056. called = false;
  2057. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2058. bindns::bind(async_write_handler,
  2059. _1, _2, 10, &called));
  2060. ios.reset();
  2061. ios.run();
  2062. BOOST_ASIO_CHECK(called);
  2063. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2064. s.reset();
  2065. s.next_write_length(10);
  2066. called = false;
  2067. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2068. bindns::bind(async_write_handler,
  2069. _1, _2, 10, &called));
  2070. ios.reset();
  2071. ios.run();
  2072. BOOST_ASIO_CHECK(called);
  2073. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2074. s.reset();
  2075. called = false;
  2076. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2077. bindns::bind(async_write_handler,
  2078. _1, _2, sizeof(mutable_write_data), &called));
  2079. ios.reset();
  2080. ios.run();
  2081. BOOST_ASIO_CHECK(called);
  2082. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2083. s.reset();
  2084. s.next_write_length(1);
  2085. called = false;
  2086. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2087. bindns::bind(async_write_handler,
  2088. _1, _2, 42, &called));
  2089. ios.reset();
  2090. ios.run();
  2091. BOOST_ASIO_CHECK(called);
  2092. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2093. s.reset();
  2094. s.next_write_length(10);
  2095. called = false;
  2096. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2097. bindns::bind(async_write_handler,
  2098. _1, _2, 50, &called));
  2099. ios.reset();
  2100. ios.run();
  2101. BOOST_ASIO_CHECK(called);
  2102. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  2103. s.reset();
  2104. called = false;
  2105. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2106. bindns::bind(async_write_handler,
  2107. _1, _2, 1, &called));
  2108. ios.reset();
  2109. ios.run();
  2110. BOOST_ASIO_CHECK(called);
  2111. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2112. s.reset();
  2113. s.next_write_length(1);
  2114. called = false;
  2115. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2116. bindns::bind(async_write_handler,
  2117. _1, _2, 1, &called));
  2118. ios.reset();
  2119. ios.run();
  2120. BOOST_ASIO_CHECK(called);
  2121. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2122. s.reset();
  2123. s.next_write_length(10);
  2124. called = false;
  2125. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2126. bindns::bind(async_write_handler,
  2127. _1, _2, 1, &called));
  2128. ios.reset();
  2129. ios.run();
  2130. BOOST_ASIO_CHECK(called);
  2131. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2132. s.reset();
  2133. called = false;
  2134. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2135. bindns::bind(async_write_handler,
  2136. _1, _2, 10, &called));
  2137. ios.reset();
  2138. ios.run();
  2139. BOOST_ASIO_CHECK(called);
  2140. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2141. s.reset();
  2142. s.next_write_length(1);
  2143. called = false;
  2144. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2145. bindns::bind(async_write_handler,
  2146. _1, _2, 10, &called));
  2147. ios.reset();
  2148. ios.run();
  2149. BOOST_ASIO_CHECK(called);
  2150. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2151. s.reset();
  2152. s.next_write_length(10);
  2153. called = false;
  2154. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2155. bindns::bind(async_write_handler,
  2156. _1, _2, 10, &called));
  2157. ios.reset();
  2158. ios.run();
  2159. BOOST_ASIO_CHECK(called);
  2160. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2161. s.reset();
  2162. called = false;
  2163. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2164. bindns::bind(async_write_handler,
  2165. _1, _2, 42, &called));
  2166. ios.reset();
  2167. ios.run();
  2168. BOOST_ASIO_CHECK(called);
  2169. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2170. s.reset();
  2171. s.next_write_length(1);
  2172. called = false;
  2173. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2174. bindns::bind(async_write_handler,
  2175. _1, _2, 42, &called));
  2176. ios.reset();
  2177. ios.run();
  2178. BOOST_ASIO_CHECK(called);
  2179. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2180. s.reset();
  2181. s.next_write_length(10);
  2182. called = false;
  2183. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2184. bindns::bind(async_write_handler,
  2185. _1, _2, 42, &called));
  2186. ios.reset();
  2187. ios.run();
  2188. BOOST_ASIO_CHECK(called);
  2189. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2190. s.reset();
  2191. called = false;
  2192. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2193. bindns::bind(async_write_handler,
  2194. _1, _2, sizeof(mutable_write_data), &called));
  2195. ios.reset();
  2196. ios.run();
  2197. BOOST_ASIO_CHECK(called);
  2198. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2199. s.reset();
  2200. s.next_write_length(1);
  2201. called = false;
  2202. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2203. bindns::bind(async_write_handler,
  2204. _1, _2, sizeof(mutable_write_data), &called));
  2205. ios.reset();
  2206. ios.run();
  2207. BOOST_ASIO_CHECK(called);
  2208. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2209. s.reset();
  2210. s.next_write_length(10);
  2211. called = false;
  2212. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2213. bindns::bind(async_write_handler,
  2214. _1, _2, sizeof(mutable_write_data), &called));
  2215. ios.reset();
  2216. ios.run();
  2217. BOOST_ASIO_CHECK(called);
  2218. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2219. s.reset();
  2220. called = false;
  2221. boost::asio::async_write(s, buffers, short_transfer,
  2222. bindns::bind(async_write_handler,
  2223. _1, _2, sizeof(mutable_write_data), &called));
  2224. ios.reset();
  2225. ios.run();
  2226. BOOST_ASIO_CHECK(called);
  2227. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2228. s.reset();
  2229. s.next_write_length(1);
  2230. called = false;
  2231. boost::asio::async_write(s, buffers, short_transfer,
  2232. bindns::bind(async_write_handler,
  2233. _1, _2, sizeof(mutable_write_data), &called));
  2234. ios.reset();
  2235. ios.run();
  2236. BOOST_ASIO_CHECK(called);
  2237. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2238. s.reset();
  2239. s.next_write_length(10);
  2240. called = false;
  2241. boost::asio::async_write(s, buffers, short_transfer,
  2242. bindns::bind(async_write_handler,
  2243. _1, _2, sizeof(mutable_write_data), &called));
  2244. ios.reset();
  2245. ios.run();
  2246. BOOST_ASIO_CHECK(called);
  2247. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
  2248. s.reset();
  2249. int i = boost::asio::async_write(s, buffers, short_transfer,
  2250. archetypes::lazy_handler());
  2251. BOOST_ASIO_CHECK(i == 42);
  2252. ios.reset();
  2253. ios.run();
  2254. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2255. }
  2256. void test_4_arg_boost_array_buffers_async_write()
  2257. {
  2258. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  2259. namespace bindns = boost;
  2260. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2261. namespace bindns = std;
  2262. using std::placeholders::_1;
  2263. using std::placeholders::_2;
  2264. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2265. #if defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  2266. boost::asio::io_service ios;
  2267. test_stream s(ios);
  2268. boost::array<boost::asio::const_buffer, 2> buffers = { {
  2269. boost::asio::buffer(write_data, 32),
  2270. boost::asio::buffer(write_data) + 32 } };
  2271. s.reset();
  2272. bool called = false;
  2273. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2274. bindns::bind(async_write_handler,
  2275. _1, _2, sizeof(write_data), &called));
  2276. ios.reset();
  2277. ios.run();
  2278. BOOST_ASIO_CHECK(called);
  2279. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2280. s.reset();
  2281. s.next_write_length(1);
  2282. called = false;
  2283. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2284. bindns::bind(async_write_handler,
  2285. _1, _2, sizeof(write_data), &called));
  2286. ios.reset();
  2287. ios.run();
  2288. BOOST_ASIO_CHECK(called);
  2289. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2290. s.reset();
  2291. s.next_write_length(10);
  2292. called = false;
  2293. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2294. bindns::bind(async_write_handler,
  2295. _1, _2, sizeof(write_data), &called));
  2296. ios.reset();
  2297. ios.run();
  2298. BOOST_ASIO_CHECK(called);
  2299. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2300. s.reset();
  2301. called = false;
  2302. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2303. bindns::bind(async_write_handler,
  2304. _1, _2, sizeof(write_data), &called));
  2305. ios.reset();
  2306. ios.run();
  2307. BOOST_ASIO_CHECK(called);
  2308. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2309. s.reset();
  2310. s.next_write_length(1);
  2311. called = false;
  2312. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2313. bindns::bind(async_write_handler,
  2314. _1, _2, 1, &called));
  2315. ios.reset();
  2316. ios.run();
  2317. BOOST_ASIO_CHECK(called);
  2318. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2319. s.reset();
  2320. s.next_write_length(10);
  2321. called = false;
  2322. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2323. bindns::bind(async_write_handler,
  2324. _1, _2, 10, &called));
  2325. ios.reset();
  2326. ios.run();
  2327. BOOST_ASIO_CHECK(called);
  2328. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2329. s.reset();
  2330. called = false;
  2331. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2332. bindns::bind(async_write_handler,
  2333. _1, _2, sizeof(write_data), &called));
  2334. ios.reset();
  2335. ios.run();
  2336. BOOST_ASIO_CHECK(called);
  2337. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2338. s.reset();
  2339. s.next_write_length(1);
  2340. called = false;
  2341. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2342. bindns::bind(async_write_handler,
  2343. _1, _2, 10, &called));
  2344. ios.reset();
  2345. ios.run();
  2346. BOOST_ASIO_CHECK(called);
  2347. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2348. s.reset();
  2349. s.next_write_length(10);
  2350. called = false;
  2351. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2352. bindns::bind(async_write_handler,
  2353. _1, _2, 10, &called));
  2354. ios.reset();
  2355. ios.run();
  2356. BOOST_ASIO_CHECK(called);
  2357. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2358. s.reset();
  2359. called = false;
  2360. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2361. bindns::bind(async_write_handler,
  2362. _1, _2, sizeof(write_data), &called));
  2363. ios.reset();
  2364. ios.run();
  2365. BOOST_ASIO_CHECK(called);
  2366. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2367. s.reset();
  2368. s.next_write_length(1);
  2369. called = false;
  2370. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2371. bindns::bind(async_write_handler,
  2372. _1, _2, 42, &called));
  2373. ios.reset();
  2374. ios.run();
  2375. BOOST_ASIO_CHECK(called);
  2376. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2377. s.reset();
  2378. s.next_write_length(10);
  2379. called = false;
  2380. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2381. bindns::bind(async_write_handler,
  2382. _1, _2, 50, &called));
  2383. ios.reset();
  2384. ios.run();
  2385. BOOST_ASIO_CHECK(called);
  2386. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  2387. s.reset();
  2388. called = false;
  2389. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2390. bindns::bind(async_write_handler,
  2391. _1, _2, 1, &called));
  2392. ios.reset();
  2393. ios.run();
  2394. BOOST_ASIO_CHECK(called);
  2395. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2396. s.reset();
  2397. s.next_write_length(1);
  2398. called = false;
  2399. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2400. bindns::bind(async_write_handler,
  2401. _1, _2, 1, &called));
  2402. ios.reset();
  2403. ios.run();
  2404. BOOST_ASIO_CHECK(called);
  2405. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2406. s.reset();
  2407. s.next_write_length(10);
  2408. called = false;
  2409. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2410. bindns::bind(async_write_handler,
  2411. _1, _2, 1, &called));
  2412. ios.reset();
  2413. ios.run();
  2414. BOOST_ASIO_CHECK(called);
  2415. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2416. s.reset();
  2417. called = false;
  2418. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2419. bindns::bind(async_write_handler,
  2420. _1, _2, 10, &called));
  2421. ios.reset();
  2422. ios.run();
  2423. BOOST_ASIO_CHECK(called);
  2424. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2425. s.reset();
  2426. s.next_write_length(1);
  2427. called = false;
  2428. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2429. bindns::bind(async_write_handler,
  2430. _1, _2, 10, &called));
  2431. ios.reset();
  2432. ios.run();
  2433. BOOST_ASIO_CHECK(called);
  2434. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2435. s.reset();
  2436. s.next_write_length(10);
  2437. called = false;
  2438. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2439. bindns::bind(async_write_handler,
  2440. _1, _2, 10, &called));
  2441. ios.reset();
  2442. ios.run();
  2443. BOOST_ASIO_CHECK(called);
  2444. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2445. s.reset();
  2446. called = false;
  2447. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2448. bindns::bind(async_write_handler,
  2449. _1, _2, 42, &called));
  2450. ios.reset();
  2451. ios.run();
  2452. BOOST_ASIO_CHECK(called);
  2453. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2454. s.reset();
  2455. s.next_write_length(1);
  2456. called = false;
  2457. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2458. bindns::bind(async_write_handler,
  2459. _1, _2, 42, &called));
  2460. ios.reset();
  2461. ios.run();
  2462. BOOST_ASIO_CHECK(called);
  2463. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2464. s.reset();
  2465. s.next_write_length(10);
  2466. called = false;
  2467. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2468. bindns::bind(async_write_handler,
  2469. _1, _2, 42, &called));
  2470. ios.reset();
  2471. ios.run();
  2472. BOOST_ASIO_CHECK(called);
  2473. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2474. s.reset();
  2475. called = false;
  2476. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2477. bindns::bind(async_write_handler,
  2478. _1, _2, sizeof(write_data), &called));
  2479. ios.reset();
  2480. ios.run();
  2481. BOOST_ASIO_CHECK(called);
  2482. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2483. s.reset();
  2484. s.next_write_length(1);
  2485. called = false;
  2486. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2487. bindns::bind(async_write_handler,
  2488. _1, _2, sizeof(write_data), &called));
  2489. ios.reset();
  2490. ios.run();
  2491. BOOST_ASIO_CHECK(called);
  2492. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2493. s.reset();
  2494. s.next_write_length(10);
  2495. called = false;
  2496. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2497. bindns::bind(async_write_handler,
  2498. _1, _2, sizeof(write_data), &called));
  2499. ios.reset();
  2500. ios.run();
  2501. BOOST_ASIO_CHECK(called);
  2502. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2503. s.reset();
  2504. called = false;
  2505. boost::asio::async_write(s, buffers, short_transfer,
  2506. bindns::bind(async_write_handler,
  2507. _1, _2, sizeof(write_data), &called));
  2508. ios.reset();
  2509. ios.run();
  2510. BOOST_ASIO_CHECK(called);
  2511. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2512. s.reset();
  2513. s.next_write_length(1);
  2514. called = false;
  2515. boost::asio::async_write(s, buffers, short_transfer,
  2516. bindns::bind(async_write_handler,
  2517. _1, _2, sizeof(write_data), &called));
  2518. ios.reset();
  2519. ios.run();
  2520. BOOST_ASIO_CHECK(called);
  2521. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2522. s.reset();
  2523. s.next_write_length(10);
  2524. called = false;
  2525. boost::asio::async_write(s, buffers, short_transfer,
  2526. bindns::bind(async_write_handler,
  2527. _1, _2, sizeof(write_data), &called));
  2528. ios.reset();
  2529. ios.run();
  2530. BOOST_ASIO_CHECK(called);
  2531. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2532. s.reset();
  2533. int i = boost::asio::async_write(s, buffers, short_transfer,
  2534. archetypes::lazy_handler());
  2535. BOOST_ASIO_CHECK(i == 42);
  2536. ios.reset();
  2537. ios.run();
  2538. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2539. #endif // defined(BOOST_ASIO_HAS_BOOST_ARRAY)
  2540. }
  2541. void test_4_arg_std_array_buffers_async_write()
  2542. {
  2543. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  2544. namespace bindns = boost;
  2545. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2546. namespace bindns = std;
  2547. using std::placeholders::_1;
  2548. using std::placeholders::_2;
  2549. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2550. #if defined(BOOST_ASIO_HAS_STD_ARRAY)
  2551. boost::asio::io_service ios;
  2552. test_stream s(ios);
  2553. std::array<boost::asio::const_buffer, 2> buffers = { {
  2554. boost::asio::buffer(write_data, 32),
  2555. boost::asio::buffer(write_data) + 32 } };
  2556. s.reset();
  2557. bool called = false;
  2558. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2559. bindns::bind(async_write_handler,
  2560. _1, _2, sizeof(write_data), &called));
  2561. ios.reset();
  2562. ios.run();
  2563. BOOST_ASIO_CHECK(called);
  2564. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2565. s.reset();
  2566. s.next_write_length(1);
  2567. called = false;
  2568. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2569. bindns::bind(async_write_handler,
  2570. _1, _2, sizeof(write_data), &called));
  2571. ios.reset();
  2572. ios.run();
  2573. BOOST_ASIO_CHECK(called);
  2574. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2575. s.reset();
  2576. s.next_write_length(10);
  2577. called = false;
  2578. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2579. bindns::bind(async_write_handler,
  2580. _1, _2, sizeof(write_data), &called));
  2581. ios.reset();
  2582. ios.run();
  2583. BOOST_ASIO_CHECK(called);
  2584. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2585. s.reset();
  2586. called = false;
  2587. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2588. bindns::bind(async_write_handler,
  2589. _1, _2, sizeof(write_data), &called));
  2590. ios.reset();
  2591. ios.run();
  2592. BOOST_ASIO_CHECK(called);
  2593. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2594. s.reset();
  2595. s.next_write_length(1);
  2596. called = false;
  2597. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2598. bindns::bind(async_write_handler,
  2599. _1, _2, 1, &called));
  2600. ios.reset();
  2601. ios.run();
  2602. BOOST_ASIO_CHECK(called);
  2603. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2604. s.reset();
  2605. s.next_write_length(10);
  2606. called = false;
  2607. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2608. bindns::bind(async_write_handler,
  2609. _1, _2, 10, &called));
  2610. ios.reset();
  2611. ios.run();
  2612. BOOST_ASIO_CHECK(called);
  2613. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2614. s.reset();
  2615. called = false;
  2616. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2617. bindns::bind(async_write_handler,
  2618. _1, _2, sizeof(write_data), &called));
  2619. ios.reset();
  2620. ios.run();
  2621. BOOST_ASIO_CHECK(called);
  2622. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2623. s.reset();
  2624. s.next_write_length(1);
  2625. called = false;
  2626. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2627. bindns::bind(async_write_handler,
  2628. _1, _2, 10, &called));
  2629. ios.reset();
  2630. ios.run();
  2631. BOOST_ASIO_CHECK(called);
  2632. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2633. s.reset();
  2634. s.next_write_length(10);
  2635. called = false;
  2636. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2637. bindns::bind(async_write_handler,
  2638. _1, _2, 10, &called));
  2639. ios.reset();
  2640. ios.run();
  2641. BOOST_ASIO_CHECK(called);
  2642. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2643. s.reset();
  2644. called = false;
  2645. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2646. bindns::bind(async_write_handler,
  2647. _1, _2, sizeof(write_data), &called));
  2648. ios.reset();
  2649. ios.run();
  2650. BOOST_ASIO_CHECK(called);
  2651. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2652. s.reset();
  2653. s.next_write_length(1);
  2654. called = false;
  2655. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2656. bindns::bind(async_write_handler,
  2657. _1, _2, 42, &called));
  2658. ios.reset();
  2659. ios.run();
  2660. BOOST_ASIO_CHECK(called);
  2661. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2662. s.reset();
  2663. s.next_write_length(10);
  2664. called = false;
  2665. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2666. bindns::bind(async_write_handler,
  2667. _1, _2, 50, &called));
  2668. ios.reset();
  2669. ios.run();
  2670. BOOST_ASIO_CHECK(called);
  2671. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  2672. s.reset();
  2673. called = false;
  2674. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2675. bindns::bind(async_write_handler,
  2676. _1, _2, 1, &called));
  2677. ios.reset();
  2678. ios.run();
  2679. BOOST_ASIO_CHECK(called);
  2680. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2681. s.reset();
  2682. s.next_write_length(1);
  2683. called = false;
  2684. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2685. bindns::bind(async_write_handler,
  2686. _1, _2, 1, &called));
  2687. ios.reset();
  2688. ios.run();
  2689. BOOST_ASIO_CHECK(called);
  2690. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2691. s.reset();
  2692. s.next_write_length(10);
  2693. called = false;
  2694. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2695. bindns::bind(async_write_handler,
  2696. _1, _2, 1, &called));
  2697. ios.reset();
  2698. ios.run();
  2699. BOOST_ASIO_CHECK(called);
  2700. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2701. s.reset();
  2702. called = false;
  2703. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2704. bindns::bind(async_write_handler,
  2705. _1, _2, 10, &called));
  2706. ios.reset();
  2707. ios.run();
  2708. BOOST_ASIO_CHECK(called);
  2709. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2710. s.reset();
  2711. s.next_write_length(1);
  2712. called = false;
  2713. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2714. bindns::bind(async_write_handler,
  2715. _1, _2, 10, &called));
  2716. ios.reset();
  2717. ios.run();
  2718. BOOST_ASIO_CHECK(called);
  2719. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2720. s.reset();
  2721. s.next_write_length(10);
  2722. called = false;
  2723. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2724. bindns::bind(async_write_handler,
  2725. _1, _2, 10, &called));
  2726. ios.reset();
  2727. ios.run();
  2728. BOOST_ASIO_CHECK(called);
  2729. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2730. s.reset();
  2731. called = false;
  2732. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2733. bindns::bind(async_write_handler,
  2734. _1, _2, 42, &called));
  2735. ios.reset();
  2736. ios.run();
  2737. BOOST_ASIO_CHECK(called);
  2738. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2739. s.reset();
  2740. s.next_write_length(1);
  2741. called = false;
  2742. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2743. bindns::bind(async_write_handler,
  2744. _1, _2, 42, &called));
  2745. ios.reset();
  2746. ios.run();
  2747. BOOST_ASIO_CHECK(called);
  2748. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2749. s.reset();
  2750. s.next_write_length(10);
  2751. called = false;
  2752. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  2753. bindns::bind(async_write_handler,
  2754. _1, _2, 42, &called));
  2755. ios.reset();
  2756. ios.run();
  2757. BOOST_ASIO_CHECK(called);
  2758. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2759. s.reset();
  2760. called = false;
  2761. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2762. bindns::bind(async_write_handler,
  2763. _1, _2, sizeof(write_data), &called));
  2764. ios.reset();
  2765. ios.run();
  2766. BOOST_ASIO_CHECK(called);
  2767. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2768. s.reset();
  2769. s.next_write_length(1);
  2770. called = false;
  2771. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2772. bindns::bind(async_write_handler,
  2773. _1, _2, sizeof(write_data), &called));
  2774. ios.reset();
  2775. ios.run();
  2776. BOOST_ASIO_CHECK(called);
  2777. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2778. s.reset();
  2779. s.next_write_length(10);
  2780. called = false;
  2781. boost::asio::async_write(s, buffers, old_style_transfer_all,
  2782. bindns::bind(async_write_handler,
  2783. _1, _2, sizeof(write_data), &called));
  2784. ios.reset();
  2785. ios.run();
  2786. BOOST_ASIO_CHECK(called);
  2787. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2788. s.reset();
  2789. called = false;
  2790. boost::asio::async_write(s, buffers, short_transfer,
  2791. bindns::bind(async_write_handler,
  2792. _1, _2, sizeof(write_data), &called));
  2793. ios.reset();
  2794. ios.run();
  2795. BOOST_ASIO_CHECK(called);
  2796. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2797. s.reset();
  2798. s.next_write_length(1);
  2799. called = false;
  2800. boost::asio::async_write(s, buffers, short_transfer,
  2801. bindns::bind(async_write_handler,
  2802. _1, _2, sizeof(write_data), &called));
  2803. ios.reset();
  2804. ios.run();
  2805. BOOST_ASIO_CHECK(called);
  2806. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2807. s.reset();
  2808. s.next_write_length(10);
  2809. called = false;
  2810. boost::asio::async_write(s, buffers, short_transfer,
  2811. bindns::bind(async_write_handler,
  2812. _1, _2, sizeof(write_data), &called));
  2813. ios.reset();
  2814. ios.run();
  2815. BOOST_ASIO_CHECK(called);
  2816. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2817. s.reset();
  2818. int i = boost::asio::async_write(s, buffers, short_transfer,
  2819. archetypes::lazy_handler());
  2820. BOOST_ASIO_CHECK(i == 42);
  2821. ios.reset();
  2822. ios.run();
  2823. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2824. #endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
  2825. }
  2826. void test_4_arg_vector_buffers_async_write()
  2827. {
  2828. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  2829. namespace bindns = boost;
  2830. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2831. namespace bindns = std;
  2832. using std::placeholders::_1;
  2833. using std::placeholders::_2;
  2834. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  2835. boost::asio::io_service ios;
  2836. test_stream s(ios);
  2837. std::vector<boost::asio::const_buffer> buffers;
  2838. buffers.push_back(boost::asio::buffer(write_data, 32));
  2839. buffers.push_back(boost::asio::buffer(write_data) + 32);
  2840. s.reset();
  2841. bool called = false;
  2842. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2843. bindns::bind(async_write_handler,
  2844. _1, _2, sizeof(write_data), &called));
  2845. ios.reset();
  2846. ios.run();
  2847. BOOST_ASIO_CHECK(called);
  2848. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2849. s.reset();
  2850. s.next_write_length(1);
  2851. called = false;
  2852. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2853. bindns::bind(async_write_handler,
  2854. _1, _2, sizeof(write_data), &called));
  2855. ios.reset();
  2856. ios.run();
  2857. BOOST_ASIO_CHECK(called);
  2858. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2859. s.reset();
  2860. s.next_write_length(10);
  2861. called = false;
  2862. boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
  2863. bindns::bind(async_write_handler,
  2864. _1, _2, sizeof(write_data), &called));
  2865. ios.reset();
  2866. ios.run();
  2867. BOOST_ASIO_CHECK(called);
  2868. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2869. s.reset();
  2870. called = false;
  2871. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2872. bindns::bind(async_write_handler,
  2873. _1, _2, sizeof(write_data), &called));
  2874. ios.reset();
  2875. ios.run();
  2876. BOOST_ASIO_CHECK(called);
  2877. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2878. s.reset();
  2879. s.next_write_length(1);
  2880. called = false;
  2881. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2882. bindns::bind(async_write_handler,
  2883. _1, _2, 1, &called));
  2884. ios.reset();
  2885. ios.run();
  2886. BOOST_ASIO_CHECK(called);
  2887. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2888. s.reset();
  2889. s.next_write_length(10);
  2890. called = false;
  2891. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
  2892. bindns::bind(async_write_handler,
  2893. _1, _2, 10, &called));
  2894. ios.reset();
  2895. ios.run();
  2896. BOOST_ASIO_CHECK(called);
  2897. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2898. s.reset();
  2899. called = false;
  2900. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2901. bindns::bind(async_write_handler,
  2902. _1, _2, sizeof(write_data), &called));
  2903. ios.reset();
  2904. ios.run();
  2905. BOOST_ASIO_CHECK(called);
  2906. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2907. s.reset();
  2908. s.next_write_length(1);
  2909. called = false;
  2910. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2911. bindns::bind(async_write_handler,
  2912. _1, _2, 10, &called));
  2913. ios.reset();
  2914. ios.run();
  2915. BOOST_ASIO_CHECK(called);
  2916. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2917. s.reset();
  2918. s.next_write_length(10);
  2919. called = false;
  2920. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
  2921. bindns::bind(async_write_handler,
  2922. _1, _2, 10, &called));
  2923. ios.reset();
  2924. ios.run();
  2925. BOOST_ASIO_CHECK(called);
  2926. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2927. s.reset();
  2928. called = false;
  2929. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2930. bindns::bind(async_write_handler,
  2931. _1, _2, sizeof(write_data), &called));
  2932. ios.reset();
  2933. ios.run();
  2934. BOOST_ASIO_CHECK(called);
  2935. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  2936. s.reset();
  2937. s.next_write_length(1);
  2938. called = false;
  2939. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2940. bindns::bind(async_write_handler,
  2941. _1, _2, 42, &called));
  2942. ios.reset();
  2943. ios.run();
  2944. BOOST_ASIO_CHECK(called);
  2945. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  2946. s.reset();
  2947. s.next_write_length(10);
  2948. called = false;
  2949. boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
  2950. bindns::bind(async_write_handler,
  2951. _1, _2, 50, &called));
  2952. ios.reset();
  2953. ios.run();
  2954. BOOST_ASIO_CHECK(called);
  2955. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  2956. s.reset();
  2957. called = false;
  2958. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2959. bindns::bind(async_write_handler,
  2960. _1, _2, 1, &called));
  2961. ios.reset();
  2962. ios.run();
  2963. BOOST_ASIO_CHECK(called);
  2964. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2965. s.reset();
  2966. s.next_write_length(1);
  2967. called = false;
  2968. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2969. bindns::bind(async_write_handler,
  2970. _1, _2, 1, &called));
  2971. ios.reset();
  2972. ios.run();
  2973. BOOST_ASIO_CHECK(called);
  2974. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2975. s.reset();
  2976. s.next_write_length(10);
  2977. called = false;
  2978. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
  2979. bindns::bind(async_write_handler,
  2980. _1, _2, 1, &called));
  2981. ios.reset();
  2982. ios.run();
  2983. BOOST_ASIO_CHECK(called);
  2984. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  2985. s.reset();
  2986. called = false;
  2987. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2988. bindns::bind(async_write_handler,
  2989. _1, _2, 10, &called));
  2990. ios.reset();
  2991. ios.run();
  2992. BOOST_ASIO_CHECK(called);
  2993. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  2994. s.reset();
  2995. s.next_write_length(1);
  2996. called = false;
  2997. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  2998. bindns::bind(async_write_handler,
  2999. _1, _2, 10, &called));
  3000. ios.reset();
  3001. ios.run();
  3002. BOOST_ASIO_CHECK(called);
  3003. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  3004. s.reset();
  3005. s.next_write_length(10);
  3006. called = false;
  3007. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
  3008. bindns::bind(async_write_handler,
  3009. _1, _2, 10, &called));
  3010. ios.reset();
  3011. ios.run();
  3012. BOOST_ASIO_CHECK(called);
  3013. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  3014. s.reset();
  3015. called = false;
  3016. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  3017. bindns::bind(async_write_handler,
  3018. _1, _2, 42, &called));
  3019. ios.reset();
  3020. ios.run();
  3021. BOOST_ASIO_CHECK(called);
  3022. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  3023. s.reset();
  3024. s.next_write_length(1);
  3025. called = false;
  3026. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  3027. bindns::bind(async_write_handler,
  3028. _1, _2, 42, &called));
  3029. ios.reset();
  3030. ios.run();
  3031. BOOST_ASIO_CHECK(called);
  3032. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  3033. s.reset();
  3034. s.next_write_length(10);
  3035. called = false;
  3036. boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
  3037. bindns::bind(async_write_handler,
  3038. _1, _2, 42, &called));
  3039. ios.reset();
  3040. ios.run();
  3041. BOOST_ASIO_CHECK(called);
  3042. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  3043. s.reset();
  3044. called = false;
  3045. boost::asio::async_write(s, buffers, old_style_transfer_all,
  3046. bindns::bind(async_write_handler,
  3047. _1, _2, sizeof(write_data), &called));
  3048. ios.reset();
  3049. ios.run();
  3050. BOOST_ASIO_CHECK(called);
  3051. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3052. s.reset();
  3053. s.next_write_length(1);
  3054. called = false;
  3055. boost::asio::async_write(s, buffers, old_style_transfer_all,
  3056. bindns::bind(async_write_handler,
  3057. _1, _2, sizeof(write_data), &called));
  3058. ios.reset();
  3059. ios.run();
  3060. BOOST_ASIO_CHECK(called);
  3061. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3062. s.reset();
  3063. s.next_write_length(10);
  3064. called = false;
  3065. boost::asio::async_write(s, buffers, old_style_transfer_all,
  3066. bindns::bind(async_write_handler,
  3067. _1, _2, sizeof(write_data), &called));
  3068. ios.reset();
  3069. ios.run();
  3070. BOOST_ASIO_CHECK(called);
  3071. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3072. s.reset();
  3073. called = false;
  3074. boost::asio::async_write(s, buffers, short_transfer,
  3075. bindns::bind(async_write_handler,
  3076. _1, _2, sizeof(write_data), &called));
  3077. ios.reset();
  3078. ios.run();
  3079. BOOST_ASIO_CHECK(called);
  3080. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3081. s.reset();
  3082. s.next_write_length(1);
  3083. called = false;
  3084. boost::asio::async_write(s, buffers, short_transfer,
  3085. bindns::bind(async_write_handler,
  3086. _1, _2, sizeof(write_data), &called));
  3087. ios.reset();
  3088. ios.run();
  3089. BOOST_ASIO_CHECK(called);
  3090. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3091. s.reset();
  3092. s.next_write_length(10);
  3093. called = false;
  3094. boost::asio::async_write(s, buffers, short_transfer,
  3095. bindns::bind(async_write_handler,
  3096. _1, _2, sizeof(write_data), &called));
  3097. ios.reset();
  3098. ios.run();
  3099. BOOST_ASIO_CHECK(called);
  3100. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3101. s.reset();
  3102. int i = boost::asio::async_write(s, buffers, short_transfer,
  3103. archetypes::lazy_handler());
  3104. BOOST_ASIO_CHECK(i == 42);
  3105. ios.reset();
  3106. ios.run();
  3107. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3108. }
  3109. void test_4_arg_streambuf_async_write()
  3110. {
  3111. #if defined(BOOST_ASIO_HAS_BOOST_BIND)
  3112. namespace bindns = boost;
  3113. #else // defined(BOOST_ASIO_HAS_BOOST_BIND)
  3114. namespace bindns = std;
  3115. using std::placeholders::_1;
  3116. using std::placeholders::_2;
  3117. #endif // defined(BOOST_ASIO_HAS_BOOST_BIND)
  3118. boost::asio::io_service ios;
  3119. test_stream s(ios);
  3120. boost::asio::streambuf sb;
  3121. boost::asio::const_buffers_1 buffers
  3122. = boost::asio::buffer(write_data, sizeof(write_data));
  3123. s.reset();
  3124. sb.consume(sb.size());
  3125. sb.sputn(write_data, sizeof(write_data));
  3126. bool called = false;
  3127. boost::asio::async_write(s, sb, boost::asio::transfer_all(),
  3128. bindns::bind(async_write_handler,
  3129. _1, _2, sizeof(write_data), &called));
  3130. ios.reset();
  3131. ios.run();
  3132. BOOST_ASIO_CHECK(called);
  3133. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3134. s.reset();
  3135. sb.consume(sb.size());
  3136. sb.sputn(write_data, sizeof(write_data));
  3137. s.next_write_length(1);
  3138. called = false;
  3139. boost::asio::async_write(s, sb, boost::asio::transfer_all(),
  3140. bindns::bind(async_write_handler,
  3141. _1, _2, sizeof(write_data), &called));
  3142. ios.reset();
  3143. ios.run();
  3144. BOOST_ASIO_CHECK(called);
  3145. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3146. s.reset();
  3147. sb.consume(sb.size());
  3148. sb.sputn(write_data, sizeof(write_data));
  3149. s.next_write_length(10);
  3150. called = false;
  3151. boost::asio::async_write(s, sb, boost::asio::transfer_all(),
  3152. bindns::bind(async_write_handler,
  3153. _1, _2, sizeof(write_data), &called));
  3154. ios.reset();
  3155. ios.run();
  3156. BOOST_ASIO_CHECK(called);
  3157. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3158. s.reset();
  3159. sb.consume(sb.size());
  3160. sb.sputn(write_data, sizeof(write_data));
  3161. called = false;
  3162. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(1),
  3163. bindns::bind(async_write_handler,
  3164. _1, _2, sizeof(write_data), &called));
  3165. ios.reset();
  3166. ios.run();
  3167. BOOST_ASIO_CHECK(called);
  3168. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3169. s.reset();
  3170. sb.consume(sb.size());
  3171. sb.sputn(write_data, sizeof(write_data));
  3172. s.next_write_length(1);
  3173. called = false;
  3174. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(1),
  3175. bindns::bind(async_write_handler,
  3176. _1, _2, 1, &called));
  3177. ios.reset();
  3178. ios.run();
  3179. BOOST_ASIO_CHECK(called);
  3180. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  3181. s.reset();
  3182. sb.consume(sb.size());
  3183. sb.sputn(write_data, sizeof(write_data));
  3184. s.next_write_length(10);
  3185. called = false;
  3186. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(1),
  3187. bindns::bind(async_write_handler,
  3188. _1, _2, 10, &called));
  3189. ios.reset();
  3190. ios.run();
  3191. BOOST_ASIO_CHECK(called);
  3192. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  3193. s.reset();
  3194. sb.consume(sb.size());
  3195. sb.sputn(write_data, sizeof(write_data));
  3196. called = false;
  3197. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(10),
  3198. bindns::bind(async_write_handler,
  3199. _1, _2, sizeof(write_data), &called));
  3200. ios.reset();
  3201. ios.run();
  3202. BOOST_ASIO_CHECK(called);
  3203. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3204. s.reset();
  3205. sb.consume(sb.size());
  3206. sb.sputn(write_data, sizeof(write_data));
  3207. s.next_write_length(1);
  3208. called = false;
  3209. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(10),
  3210. bindns::bind(async_write_handler,
  3211. _1, _2, 10, &called));
  3212. ios.reset();
  3213. ios.run();
  3214. BOOST_ASIO_CHECK(called);
  3215. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  3216. s.reset();
  3217. sb.consume(sb.size());
  3218. sb.sputn(write_data, sizeof(write_data));
  3219. s.next_write_length(10);
  3220. called = false;
  3221. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(10),
  3222. bindns::bind(async_write_handler,
  3223. _1, _2, 10, &called));
  3224. ios.reset();
  3225. ios.run();
  3226. BOOST_ASIO_CHECK(called);
  3227. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  3228. s.reset();
  3229. sb.consume(sb.size());
  3230. sb.sputn(write_data, sizeof(write_data));
  3231. called = false;
  3232. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(42),
  3233. bindns::bind(async_write_handler,
  3234. _1, _2, sizeof(write_data), &called));
  3235. ios.reset();
  3236. ios.run();
  3237. BOOST_ASIO_CHECK(called);
  3238. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3239. s.reset();
  3240. sb.consume(sb.size());
  3241. sb.sputn(write_data, sizeof(write_data));
  3242. s.next_write_length(1);
  3243. called = false;
  3244. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(42),
  3245. bindns::bind(async_write_handler,
  3246. _1, _2, 42, &called));
  3247. ios.reset();
  3248. ios.run();
  3249. BOOST_ASIO_CHECK(called);
  3250. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  3251. s.reset();
  3252. sb.consume(sb.size());
  3253. sb.sputn(write_data, sizeof(write_data));
  3254. s.next_write_length(10);
  3255. called = false;
  3256. boost::asio::async_write(s, sb, boost::asio::transfer_at_least(42),
  3257. bindns::bind(async_write_handler,
  3258. _1, _2, 50, &called));
  3259. ios.reset();
  3260. ios.run();
  3261. BOOST_ASIO_CHECK(called);
  3262. BOOST_ASIO_CHECK(s.check_buffers(buffers, 50));
  3263. s.reset();
  3264. sb.consume(sb.size());
  3265. sb.sputn(write_data, sizeof(write_data));
  3266. called = false;
  3267. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(1),
  3268. bindns::bind(async_write_handler,
  3269. _1, _2, 1, &called));
  3270. ios.reset();
  3271. ios.run();
  3272. BOOST_ASIO_CHECK(called);
  3273. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  3274. s.reset();
  3275. sb.consume(sb.size());
  3276. sb.sputn(write_data, sizeof(write_data));
  3277. s.next_write_length(1);
  3278. called = false;
  3279. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(1),
  3280. bindns::bind(async_write_handler,
  3281. _1, _2, 1, &called));
  3282. ios.reset();
  3283. ios.run();
  3284. BOOST_ASIO_CHECK(called);
  3285. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  3286. s.reset();
  3287. sb.consume(sb.size());
  3288. sb.sputn(write_data, sizeof(write_data));
  3289. s.next_write_length(10);
  3290. called = false;
  3291. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(1),
  3292. bindns::bind(async_write_handler,
  3293. _1, _2, 1, &called));
  3294. ios.reset();
  3295. ios.run();
  3296. BOOST_ASIO_CHECK(called);
  3297. BOOST_ASIO_CHECK(s.check_buffers(buffers, 1));
  3298. s.reset();
  3299. sb.consume(sb.size());
  3300. sb.sputn(write_data, sizeof(write_data));
  3301. called = false;
  3302. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(10),
  3303. bindns::bind(async_write_handler,
  3304. _1, _2, 10, &called));
  3305. ios.reset();
  3306. ios.run();
  3307. BOOST_ASIO_CHECK(called);
  3308. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  3309. s.reset();
  3310. sb.consume(sb.size());
  3311. sb.sputn(write_data, sizeof(write_data));
  3312. s.next_write_length(1);
  3313. called = false;
  3314. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(10),
  3315. bindns::bind(async_write_handler,
  3316. _1, _2, 10, &called));
  3317. ios.reset();
  3318. ios.run();
  3319. BOOST_ASIO_CHECK(called);
  3320. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  3321. s.reset();
  3322. sb.consume(sb.size());
  3323. sb.sputn(write_data, sizeof(write_data));
  3324. s.next_write_length(10);
  3325. called = false;
  3326. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(10),
  3327. bindns::bind(async_write_handler,
  3328. _1, _2, 10, &called));
  3329. ios.reset();
  3330. ios.run();
  3331. BOOST_ASIO_CHECK(called);
  3332. BOOST_ASIO_CHECK(s.check_buffers(buffers, 10));
  3333. s.reset();
  3334. sb.consume(sb.size());
  3335. sb.sputn(write_data, sizeof(write_data));
  3336. called = false;
  3337. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(42),
  3338. bindns::bind(async_write_handler,
  3339. _1, _2, 42, &called));
  3340. ios.reset();
  3341. ios.run();
  3342. BOOST_ASIO_CHECK(called);
  3343. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  3344. s.reset();
  3345. sb.consume(sb.size());
  3346. sb.sputn(write_data, sizeof(write_data));
  3347. s.next_write_length(1);
  3348. called = false;
  3349. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(42),
  3350. bindns::bind(async_write_handler,
  3351. _1, _2, 42, &called));
  3352. ios.reset();
  3353. ios.run();
  3354. BOOST_ASIO_CHECK(called);
  3355. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  3356. s.reset();
  3357. sb.consume(sb.size());
  3358. sb.sputn(write_data, sizeof(write_data));
  3359. s.next_write_length(10);
  3360. called = false;
  3361. boost::asio::async_write(s, sb, boost::asio::transfer_exactly(42),
  3362. bindns::bind(async_write_handler,
  3363. _1, _2, 42, &called));
  3364. ios.reset();
  3365. ios.run();
  3366. BOOST_ASIO_CHECK(called);
  3367. BOOST_ASIO_CHECK(s.check_buffers(buffers, 42));
  3368. s.reset();
  3369. sb.consume(sb.size());
  3370. sb.sputn(write_data, sizeof(write_data));
  3371. called = false;
  3372. boost::asio::async_write(s, sb, old_style_transfer_all,
  3373. bindns::bind(async_write_handler,
  3374. _1, _2, sizeof(write_data), &called));
  3375. ios.reset();
  3376. ios.run();
  3377. BOOST_ASIO_CHECK(called);
  3378. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3379. s.reset();
  3380. sb.consume(sb.size());
  3381. sb.sputn(write_data, sizeof(write_data));
  3382. s.next_write_length(1);
  3383. called = false;
  3384. boost::asio::async_write(s, sb, old_style_transfer_all,
  3385. bindns::bind(async_write_handler,
  3386. _1, _2, sizeof(write_data), &called));
  3387. ios.reset();
  3388. ios.run();
  3389. BOOST_ASIO_CHECK(called);
  3390. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3391. s.reset();
  3392. sb.consume(sb.size());
  3393. sb.sputn(write_data, sizeof(write_data));
  3394. s.next_write_length(10);
  3395. called = false;
  3396. boost::asio::async_write(s, sb, old_style_transfer_all,
  3397. bindns::bind(async_write_handler,
  3398. _1, _2, sizeof(write_data), &called));
  3399. ios.reset();
  3400. ios.run();
  3401. BOOST_ASIO_CHECK(called);
  3402. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3403. s.reset();
  3404. sb.consume(sb.size());
  3405. sb.sputn(write_data, sizeof(write_data));
  3406. called = false;
  3407. boost::asio::async_write(s, sb, short_transfer,
  3408. bindns::bind(async_write_handler,
  3409. _1, _2, sizeof(write_data), &called));
  3410. ios.reset();
  3411. ios.run();
  3412. BOOST_ASIO_CHECK(called);
  3413. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3414. s.reset();
  3415. sb.consume(sb.size());
  3416. sb.sputn(write_data, sizeof(write_data));
  3417. s.next_write_length(1);
  3418. called = false;
  3419. boost::asio::async_write(s, sb, short_transfer,
  3420. bindns::bind(async_write_handler,
  3421. _1, _2, sizeof(write_data), &called));
  3422. ios.reset();
  3423. ios.run();
  3424. BOOST_ASIO_CHECK(called);
  3425. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3426. s.reset();
  3427. sb.consume(sb.size());
  3428. sb.sputn(write_data, sizeof(write_data));
  3429. s.next_write_length(10);
  3430. called = false;
  3431. boost::asio::async_write(s, sb, short_transfer,
  3432. bindns::bind(async_write_handler,
  3433. _1, _2, sizeof(write_data), &called));
  3434. ios.reset();
  3435. ios.run();
  3436. BOOST_ASIO_CHECK(called);
  3437. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3438. s.reset();
  3439. sb.consume(sb.size());
  3440. sb.sputn(write_data, sizeof(write_data));
  3441. int i = boost::asio::async_write(s, sb, short_transfer,
  3442. archetypes::lazy_handler());
  3443. BOOST_ASIO_CHECK(i == 42);
  3444. ios.reset();
  3445. ios.run();
  3446. BOOST_ASIO_CHECK(s.check_buffers(buffers, sizeof(write_data)));
  3447. }
  3448. BOOST_ASIO_TEST_SUITE
  3449. (
  3450. "write",
  3451. BOOST_ASIO_TEST_CASE(test_2_arg_zero_buffers_write)
  3452. BOOST_ASIO_TEST_CASE(test_2_arg_const_buffers_1_write)
  3453. BOOST_ASIO_TEST_CASE(test_2_arg_mutable_buffers_1_write)
  3454. BOOST_ASIO_TEST_CASE(test_2_arg_vector_buffers_write)
  3455. BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_zero_buffers_write)
  3456. BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_const_buffers_1_write)
  3457. BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_mutable_buffers_1_write)
  3458. BOOST_ASIO_TEST_CASE(test_3_arg_nothrow_vector_buffers_write)
  3459. BOOST_ASIO_TEST_CASE(test_3_arg_const_buffers_1_write)
  3460. BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffers_1_write)
  3461. BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_write)
  3462. BOOST_ASIO_TEST_CASE(test_4_arg_const_buffers_1_write)
  3463. BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffers_1_write)
  3464. BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_write)
  3465. BOOST_ASIO_TEST_CASE(test_3_arg_const_buffers_1_async_write)
  3466. BOOST_ASIO_TEST_CASE(test_3_arg_mutable_buffers_1_async_write)
  3467. BOOST_ASIO_TEST_CASE(test_3_arg_boost_array_buffers_async_write)
  3468. BOOST_ASIO_TEST_CASE(test_3_arg_std_array_buffers_async_write)
  3469. BOOST_ASIO_TEST_CASE(test_3_arg_vector_buffers_async_write)
  3470. BOOST_ASIO_TEST_CASE(test_3_arg_streambuf_async_write)
  3471. BOOST_ASIO_TEST_CASE(test_4_arg_const_buffers_1_async_write)
  3472. BOOST_ASIO_TEST_CASE(test_4_arg_mutable_buffers_1_async_write)
  3473. BOOST_ASIO_TEST_CASE(test_4_arg_boost_array_buffers_async_write)
  3474. BOOST_ASIO_TEST_CASE(test_4_arg_std_array_buffers_async_write)
  3475. BOOST_ASIO_TEST_CASE(test_4_arg_vector_buffers_async_write)
  3476. BOOST_ASIO_TEST_CASE(test_4_arg_streambuf_async_write)
  3477. )