Add option for spinning or blocking.
diff --git a/asio/src/tests/latency/tcp_client.cpp b/asio/src/tests/latency/tcp_client.cpp index 03fabac..f18c768 100644 --- a/asio/src/tests/latency/tcp_client.cpp +++ b/asio/src/tests/latency/tcp_client.cpp
@@ -14,6 +14,8 @@ #include <boost/date_time/posix_time/posix_time_types.hpp> #include <boost/shared_ptr.hpp> #include <cstdio> +#include <cstdlib> +#include <cstring> #include <vector> #include "high_res_clock.hpp" @@ -34,32 +36,43 @@ int main(int argc, char* argv[]) { - if (argc != 5) + if (argc != 6) { - std::fprintf(stderr, "Usage: tcp_client <ip> <port> <nconns> <bufsize>\n"); + std::fprintf(stderr, + "Usage: tcp_client <ip> <port> " + "<nconns> <bufsize> {spin|block}\n"); return 1; } + const char* ip = argv[1]; + unsigned short port = static_cast<unsigned short>(std::atoi(argv[2])); + int num_connections = std::atoi(argv[3]); + std::size_t buf_size = static_cast<std::size_t>(std::atoi(argv[4])); + bool spin = (std::strcmp(argv[5], "spin") == 0); + asio::io_service io_service; std::vector<boost::shared_ptr<tcp::socket> > sockets; - const char* ip = argv[1]; - unsigned short port = static_cast<unsigned short>(std::atoi(argv[2])); - tcp::endpoint target(asio::ip::address::from_string(ip), port); - - int num_connections = std::atoi(argv[3]); for (int i = 0; i < num_connections; ++i) { boost::shared_ptr<tcp::socket> s(new tcp::socket(io_service)); + + tcp::endpoint target(asio::ip::address::from_string(ip), port); s->connect(target); + s->set_option(tcp::no_delay(true)); - tcp::socket::non_blocking_io nbio(true); - s->io_control(nbio); + + if (spin) + { + tcp::socket::non_blocking_io nbio(true); + s->io_control(nbio); + } + sockets.push_back(s); } - std::vector<unsigned char> write_buf(std::atoi(argv[4])); - std::vector<unsigned char> read_buf(std::atoi(argv[4])); + std::vector<unsigned char> write_buf(buf_size); + std::vector<unsigned char> read_buf(buf_size); ptime start = microsec_clock::universal_time(); boost::uint64_t start_hr = high_res_clock();
diff --git a/asio/src/tests/latency/tcp_server.cpp b/asio/src/tests/latency/tcp_server.cpp index c97a2f3..18c6e9c 100644 --- a/asio/src/tests/latency/tcp_server.cpp +++ b/asio/src/tests/latency/tcp_server.cpp
@@ -15,6 +15,7 @@ #include <boost/shared_ptr.hpp> #include <cstdio> #include <cstdlib> +#include <cstring> #include <vector> using asio::ip::tcp; @@ -24,10 +25,10 @@ class tcp_server : coroutine { public: - tcp_server(tcp::acceptor& acceptor, std::size_t bufsize) : + tcp_server(tcp::acceptor& acceptor, std::size_t buf_size) : acceptor_(acceptor), socket_(acceptor_.get_io_service()), - buffer_(bufsize) + buffer_(buf_size) { } @@ -73,25 +74,32 @@ int main(int argc, char* argv[]) { - if (argc != 4) + if (argc != 5) { - std::fprintf(stderr, "Usage: tcp_server <port> <nconns> <bufsize>\n"); + std::fprintf(stderr, + "Usage: tcp_server <port> <nconns> " + "<bufsize> {spin|block}\n"); return 1; } - asio::io_service io_service; unsigned short port = static_cast<unsigned short>(std::atoi(argv[1])); + int max_connections = std::atoi(argv[2]); + std::size_t buf_size = std::atoi(argv[3]); + bool spin = (std::strcmp(argv[4], "spin") == 0); + + asio::io_service io_service; tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), port)); std::vector<boost::shared_ptr<tcp_server> > servers; - int max_connections = std::atoi(argv[2]); - std::size_t bufsize = std::atoi(argv[3]); for (int i = 0; i < max_connections; ++i) { - boost::shared_ptr<tcp_server> s(new tcp_server(acceptor, bufsize)); + boost::shared_ptr<tcp_server> s(new tcp_server(acceptor, buf_size)); servers.push_back(s); (*s)(asio::error_code()); } - for (;;) io_service.poll(); + if (spin) + for (;;) io_service.poll(); + else + io_service.run(); }
diff --git a/asio/src/tests/latency/udp_client.cpp b/asio/src/tests/latency/udp_client.cpp index 6526b12..b5ce8c9 100644 --- a/asio/src/tests/latency/udp_client.cpp +++ b/asio/src/tests/latency/udp_client.cpp
@@ -12,6 +12,8 @@ #include <boost/date_time/posix_time/posix_time_types.hpp> #include <algorithm> #include <cstdio> +#include <cstdlib> +#include <cstring> #include <vector> #include "high_res_clock.hpp" @@ -23,25 +25,34 @@ int main(int argc, char* argv[]) { - if (argc != 5) + if (argc != 6) { - std::fprintf(stderr, "Usage: udp_client <ip> <port1> <nports> <bufsize>\n"); + std::fprintf(stderr, + "Usage: udp_client <ip> <port1> " + "<nports> <bufsize> {spin|block}\n"); return 1; } + const char* ip = argv[1]; + unsigned short first_port = static_cast<unsigned short>(std::atoi(argv[2])); + unsigned short num_ports = static_cast<unsigned short>(std::atoi(argv[3])); + std::size_t buf_size = static_cast<std::size_t>(std::atoi(argv[4])); + bool spin = (std::strcmp(argv[5], "spin") == 0); + asio::io_service io_service; udp::socket socket(io_service, udp::endpoint(udp::v4(), 0)); - udp::socket::non_blocking_io nbio(true); - socket.io_control(nbio); - unsigned short first_port = static_cast<unsigned short>(std::atoi(argv[2])); - unsigned short num_ports = static_cast<unsigned short>(std::atoi(argv[3])); + if (spin) + { + udp::socket::non_blocking_io nbio(true); + socket.io_control(nbio); + } + + udp::endpoint target(asio::ip::address::from_string(ip), first_port); unsigned short last_port = first_port + num_ports - 1; - udp::endpoint target(asio::ip::address::from_string(argv[1]), first_port); - - std::vector<unsigned char> write_buf(std::atoi(argv[4])); - std::vector<unsigned char> read_buf(std::atoi(argv[4])); + std::vector<unsigned char> write_buf(buf_size); + std::vector<unsigned char> read_buf(buf_size); ptime start = microsec_clock::universal_time(); boost::uint64_t start_hr = high_res_clock();
diff --git a/asio/src/tests/latency/udp_server.cpp b/asio/src/tests/latency/udp_server.cpp index 8d234c0..2a4dc18 100644 --- a/asio/src/tests/latency/udp_server.cpp +++ b/asio/src/tests/latency/udp_server.cpp
@@ -13,6 +13,7 @@ #include <boost/shared_ptr.hpp> #include <cstdio> #include <cstdlib> +#include <cstring> #include <vector> using asio::ip::udp; @@ -23,9 +24,9 @@ { public: udp_server(asio::io_service& io_service, - unsigned short port, std::size_t bufsize) : + unsigned short port, std::size_t buf_size) : socket_(io_service, udp::endpoint(udp::v4(), port)), - buffer_(bufsize) + buffer_(buf_size) { } @@ -62,25 +63,32 @@ int main(int argc, char* argv[]) { - if (argc != 4) + if (argc != 5) { - std::fprintf(stderr, "Usage: udp_server <port1> <nports> <bufsize>\n"); + std::fprintf(stderr, + "Usage: udp_server <port1> <nports> " + "<bufsize> {spin|block}\n"); return 1; } + unsigned short first_port = static_cast<unsigned short>(std::atoi(argv[1])); + unsigned short num_ports = static_cast<unsigned short>(std::atoi(argv[2])); + std::size_t buf_size = std::atoi(argv[3]); + bool spin = (std::strcmp(argv[4], "spin") == 0); + asio::io_service io_service; std::vector<boost::shared_ptr<udp_server> > servers; - unsigned short first_port = static_cast<unsigned short>(std::atoi(argv[1])); - unsigned short num_ports = static_cast<unsigned short>(std::atoi(argv[3])); - std::size_t bufsize = std::atoi(argv[3]); for (unsigned short i = 0; i < num_ports; ++i) { unsigned short port = first_port + i; - boost::shared_ptr<udp_server> s(new udp_server(io_service, port, bufsize)); + boost::shared_ptr<udp_server> s(new udp_server(io_service, port, buf_size)); servers.push_back(s); (*s)(asio::error_code()); } - for (;;) io_service.poll(); + if (spin) + for (;;) io_service.poll(); + else + io_service.run(); }