explicit ws_echo_server( std::ostream& log, kind k = kind::sync) : log_(log) , work_(ioc_.get_executor()) , ts_(ioc_) , ws_(ts_) { beast::websocket::permessage_deflate pmd; pmd.server_enable = true; pmd.server_max_window_bits = 9; pmd.compLevel = 1; ws_.set_option(pmd); switch(k) { case kind::sync: t_ = std::thread{[&]{ do_sync(); }}; break; case kind::async: t_ = std::thread{[&]{ ioc_.run(); }}; do_accept(); break; case kind::async_client: t_ = std::thread{[&]{ ioc_.run(); }}; break; } }
void deadline_timer_custom_allocation_test() { static boost::asio::io_context io_context; struct timer { boost::asio::deadline_timer t; timer() : t(io_context) {} } timers[100]; int allocation_count = 0; for (int i = 0; i < 50; ++i) { timers[i].t.expires_at(boost::posix_time::pos_infin); timers[i].t.async_wait(custom_allocation_timer_handler(&allocation_count)); } for (int i = 50; i < 100; ++i) { timers[i].t.expires_at(boost::posix_time::neg_infin); timers[i].t.async_wait(custom_allocation_timer_handler(&allocation_count)); } for (int i = 0; i < 50; ++i) timers[i].t.cancel(); io_context.run(); BOOST_ASIO_CHECK(allocation_count == 0); }
int udp_server_main(boost::asio::io_context& io_context, unsigned short port_num) { try { io_context.reset(); udp_server server(io_context, port_num); io_context.run(); std::cout << __func__ << " done with port " << port_num << "\n"; } catch (std::exception& e) { std::cerr << e.what() << std::endl; } return 0; }