mirror of
https://github.com/boostorg/asio.git
synced 2026-01-28 06:42:08 +00:00
Merge from trunk...
Fix compile error in regex overload of async_read_until.hpp. Fixes #5688 Explicitly specify the signal() function from the global namespace. Fixes #5722 Don't read the clock unless the heap is non-empty. Change the SSL buffers sizes so that they're large enough to hold a complete TLS record. Fixes #5854 Make sure the synchronous null_buffers operations obey the user's non_blocking setting. Fixes #5756 Set size of select fd_set at runtime when using Windows. Disable warning due to const qualifier being applied to function type. Fix crash due to gcc_x86_fenced_block that shows up when using the Intel C++ compiler. Fixes #5763 Specialise operations for buffer sequences that are arrays of exactly two buffers. Initialise all OpenSSL algorithms. Fix error mapping when session is gracefully shut down. Various performance improvements: * Split the task_io_service's run and poll code. * Use thread-local operation queues in single-threaded use cases (i.e. concurrency_hint is 1) to eliminate a lock/unlock pair. * Only fence block exit when a handler is being run directly out of the io_service. * Prefer x86 mfence-based fenced block when available. * Use a plain ol' long for the atomic_count when all thread support is disabled. * Allow some epoll_reactor speculative operations to be performed without holding the lock. * Improve locality of reference by performing an epoll_reactor's I/O operation immediately before the corresponding handler is called. This also improves scalability across CPUs when multiple threads are running the io_service. * Pass same error_code variable through to each operation's complete() function. * Optimise creation of and access to the io_service implementation. Remove unused state in HTTP server examples. Add latency test programs. [SVN r74863]
This commit is contained in:
855
test/write.cpp
855
test/write.cpp
@@ -16,6 +16,9 @@
|
||||
// Test that header file is self-contained.
|
||||
#include <boost/asio/write.hpp>
|
||||
|
||||
#if defined(BOOST_ASIO_HAS_STD_ARRAY)
|
||||
# include <array>
|
||||
#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
|
||||
#include <boost/array.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
@@ -184,13 +187,13 @@ void test_2_arg_mutable_buffers_1_write()
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
|
||||
}
|
||||
|
||||
void test_2_arg_multi_buffers_write()
|
||||
void test_2_arg_vector_buffers_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
boost::array<boost::asio::const_buffer, 2> buffers = { {
|
||||
boost::asio::buffer(write_data, 32),
|
||||
boost::asio::buffer(write_data) + 32 } };
|
||||
std::vector<boost::asio::const_buffer> buffers;
|
||||
buffers.push_back(boost::asio::buffer(write_data, 32));
|
||||
buffers.push_back(boost::asio::buffer(write_data) + 32);
|
||||
|
||||
s.reset();
|
||||
size_t bytes_transferred = boost::asio::write(s, buffers);
|
||||
@@ -280,13 +283,13 @@ void test_3_arg_nothrow_mutable_buffers_1_write()
|
||||
BOOST_CHECK(!error);
|
||||
}
|
||||
|
||||
void test_3_arg_nothrow_multi_buffers_write()
|
||||
void test_3_arg_nothrow_vector_buffers_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
boost::array<boost::asio::const_buffer, 2> buffers = { {
|
||||
boost::asio::buffer(write_data, 32),
|
||||
boost::asio::buffer(write_data) + 32 } };
|
||||
std::vector<boost::asio::const_buffer> buffers;
|
||||
buffers.push_back(boost::asio::buffer(write_data, 32));
|
||||
buffers.push_back(boost::asio::buffer(write_data) + 32);
|
||||
|
||||
s.reset();
|
||||
boost::system::error_code error;
|
||||
@@ -686,13 +689,13 @@ void test_3_arg_mutable_buffers_1_write()
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
|
||||
}
|
||||
|
||||
void test_3_arg_multi_buffers_write()
|
||||
void test_3_arg_vector_buffers_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
boost::array<boost::asio::const_buffer, 2> buffers = { {
|
||||
boost::asio::buffer(write_data, 32),
|
||||
boost::asio::buffer(write_data) + 32 } };
|
||||
std::vector<boost::asio::const_buffer> buffers;
|
||||
buffers.push_back(boost::asio::buffer(write_data, 32));
|
||||
buffers.push_back(boost::asio::buffer(write_data) + 32);
|
||||
|
||||
s.reset();
|
||||
size_t bytes_transferred = boost::asio::write(s, buffers,
|
||||
@@ -1343,13 +1346,13 @@ void test_4_arg_mutable_buffers_1_write()
|
||||
BOOST_CHECK(!error);
|
||||
}
|
||||
|
||||
void test_4_arg_multi_buffers_write()
|
||||
void test_4_arg_vector_buffers_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
boost::array<boost::asio::const_buffer, 2> buffers = { {
|
||||
boost::asio::buffer(write_data, 32),
|
||||
boost::asio::buffer(write_data) + 32 } };
|
||||
std::vector<boost::asio::const_buffer> buffers;
|
||||
buffers.push_back(boost::asio::buffer(write_data, 32));
|
||||
buffers.push_back(boost::asio::buffer(write_data) + 32);
|
||||
|
||||
s.reset();
|
||||
boost::system::error_code error;
|
||||
@@ -1681,7 +1684,7 @@ void test_3_arg_mutable_buffers_1_async_write()
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
|
||||
}
|
||||
|
||||
void test_3_arg_multi_buffers_async_write()
|
||||
void test_3_arg_boost_array_buffers_async_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
@@ -1728,6 +1731,102 @@ void test_3_arg_multi_buffers_async_write()
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
}
|
||||
|
||||
void test_3_arg_std_array_buffers_async_write()
|
||||
{
|
||||
#if defined(BOOST_ASIO_HAS_STD_ARRAY)
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
std::array<boost::asio::const_buffer, 2> buffers = { {
|
||||
boost::asio::buffer(write_data, 32),
|
||||
boost::asio::buffer(write_data) + 32 } };
|
||||
|
||||
s.reset();
|
||||
bool called = false;
|
||||
boost::asio::async_write(s, buffers,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
|
||||
}
|
||||
|
||||
void test_3_arg_vector_buffers_async_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
std::vector<boost::asio::const_buffer> buffers;
|
||||
buffers.push_back(boost::asio::buffer(write_data, 32));
|
||||
buffers.push_back(boost::asio::buffer(write_data) + 32);
|
||||
|
||||
s.reset();
|
||||
bool called = false;
|
||||
boost::asio::async_write(s, buffers,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
}
|
||||
|
||||
void test_4_arg_const_buffers_1_async_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
@@ -2428,7 +2527,7 @@ void test_4_arg_mutable_buffers_1_async_write()
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(mutable_write_data)));
|
||||
}
|
||||
|
||||
void test_4_arg_multi_buffers_async_write()
|
||||
void test_4_arg_boost_array_buffers_async_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
@@ -2779,28 +2878,736 @@ void test_4_arg_multi_buffers_async_write()
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
}
|
||||
|
||||
void test_4_arg_std_array_buffers_async_write()
|
||||
{
|
||||
#if defined(BOOST_ASIO_HAS_STD_ARRAY)
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
std::array<boost::asio::const_buffer, 2> buffers = { {
|
||||
boost::asio::buffer(write_data, 32),
|
||||
boost::asio::buffer(write_data) + 32 } };
|
||||
|
||||
s.reset();
|
||||
bool called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
1, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 1));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
42, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 42));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
50, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 50));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
1, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 1));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
1, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 1));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
1, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 1));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
42, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 42));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
42, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 42));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
42, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 42));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, old_style_transfer_all,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, old_style_transfer_all,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, old_style_transfer_all,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, short_transfer,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, short_transfer,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, short_transfer,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
#endif // defined(BOOST_ASIO_HAS_STD_ARRAY)
|
||||
}
|
||||
|
||||
void test_4_arg_vector_buffers_async_write()
|
||||
{
|
||||
boost::asio::io_service ios;
|
||||
test_stream s(ios);
|
||||
std::vector<boost::asio::const_buffer> buffers;
|
||||
buffers.push_back(boost::asio::buffer(write_data, 32));
|
||||
buffers.push_back(boost::asio::buffer(write_data) + 32);
|
||||
|
||||
s.reset();
|
||||
bool called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_all(),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
1, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 1));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
42, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 42));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_at_least(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
50, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 50));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
1, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 1));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
1, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 1));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(1),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
1, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 1));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(10),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
10, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 10));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
42, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 42));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
42, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 42));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, boost::asio::transfer_exactly(42),
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
42, &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, 42));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, old_style_transfer_all,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, old_style_transfer_all,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, old_style_transfer_all,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, short_transfer,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(1);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, short_transfer,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
|
||||
s.reset();
|
||||
s.next_write_length(10);
|
||||
called = false;
|
||||
boost::asio::async_write(s, buffers, short_transfer,
|
||||
boost::bind(async_write_handler,
|
||||
boost::asio::placeholders::error,
|
||||
boost::asio::placeholders::bytes_transferred,
|
||||
sizeof(write_data), &called));
|
||||
ios.reset();
|
||||
ios.run();
|
||||
BOOST_CHECK(called);
|
||||
BOOST_CHECK(s.check_buffers(buffers, sizeof(write_data)));
|
||||
}
|
||||
|
||||
test_suite* init_unit_test_suite(int, char*[])
|
||||
{
|
||||
test_suite* test = BOOST_TEST_SUITE("write");
|
||||
test->add(BOOST_TEST_CASE(&test_2_arg_zero_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_2_arg_const_buffers_1_write));
|
||||
test->add(BOOST_TEST_CASE(&test_2_arg_mutable_buffers_1_write));
|
||||
test->add(BOOST_TEST_CASE(&test_2_arg_multi_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_2_arg_vector_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_nothrow_zero_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_nothrow_const_buffers_1_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_nothrow_mutable_buffers_1_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_nothrow_multi_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_nothrow_vector_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_const_buffers_1_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_mutable_buffers_1_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_multi_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_vector_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_const_buffers_1_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_mutable_buffers_1_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_multi_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_vector_buffers_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_const_buffers_1_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_mutable_buffers_1_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_multi_buffers_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_boost_array_buffers_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_std_array_buffers_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_3_arg_vector_buffers_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_const_buffers_1_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_mutable_buffers_1_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_multi_buffers_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_boost_array_buffers_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_std_array_buffers_async_write));
|
||||
test->add(BOOST_TEST_CASE(&test_4_arg_vector_buffers_async_write));
|
||||
return test;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user