diff --git a/CHANGELOG.md b/CHANGELOG.md index 6df81f4d..be4b6ae3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Version 217: * websocket idle pings * RatePolicy documentation +* Pass strand to async_accept -------------------------------------------------------------------------------- diff --git a/example/advanced/server-flex/advanced_server_flex.cpp b/example/advanced/server-flex/advanced_server_flex.cpp index 256c36dc..1ee9862a 100644 --- a/example/advanced/server-flex/advanced_server_flex.cpp +++ b/example/advanced/server-flex/advanced_server_flex.cpp @@ -861,7 +861,6 @@ class listener : public std::enable_shared_from_this net::io_context& ioc_; ssl::context& ctx_; tcp::acceptor acceptor_; - tcp::socket socket_; std::shared_ptr doc_root_; public: @@ -873,7 +872,6 @@ public: : ioc_(ioc) , ctx_(ctx) , acceptor_(beast::make_strand(ioc)) - , socket_(beast::make_strand(ioc)) , doc_root_(doc_root) { beast::error_code ec; @@ -924,15 +922,16 @@ public: void do_accept() { + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); } void - on_accept(beast::error_code ec) + on_accept(beast::error_code ec, tcp::socket socket) { if(ec) { @@ -942,14 +941,11 @@ public: { // Create the detector http_session and run it std::make_shared( - std::move(socket_), + std::move(socket), ctx_, doc_root_)->run(); } - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - // Accept another connection do_accept(); } diff --git a/example/advanced/server/advanced_server.cpp b/example/advanced/server/advanced_server.cpp index 7985bc3a..eba64a01 100644 --- a/example/advanced/server/advanced_server.cpp +++ b/example/advanced/server/advanced_server.cpp @@ -526,7 +526,6 @@ class listener : public std::enable_shared_from_this { net::io_context& ioc_; tcp::acceptor acceptor_; - tcp::socket socket_; std::shared_ptr doc_root_; public: @@ -536,7 +535,6 @@ public: std::shared_ptr const& doc_root) : ioc_(ioc) , acceptor_(beast::make_strand(ioc)) - , socket_(beast::make_strand(ioc)) , doc_root_(doc_root) { beast::error_code ec; @@ -587,15 +585,16 @@ public: void do_accept() { + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); } void - on_accept(beast::error_code ec) + on_accept(beast::error_code ec, tcp::socket socket) { if(ec) { @@ -605,13 +604,10 @@ public: { // Create the http session and run it std::make_shared( - std::move(socket_), + std::move(socket), doc_root_)->run(); } - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - // Accept another connection do_accept(); } diff --git a/example/http/server/async-ssl/http_server_async_ssl.cpp b/example/http/server/async-ssl/http_server_async_ssl.cpp index 75f8bd69..872b585c 100644 --- a/example/http/server/async-ssl/http_server_async_ssl.cpp +++ b/example/http/server/async-ssl/http_server_async_ssl.cpp @@ -390,7 +390,6 @@ class listener : public std::enable_shared_from_this net::io_context& ioc_; ssl::context& ctx_; tcp::acceptor acceptor_; - tcp::socket socket_; std::shared_ptr doc_root_; public: @@ -402,7 +401,6 @@ public: : ioc_(ioc) , ctx_(ctx) , acceptor_(ioc) - , socket_(beast::make_strand(ioc)) , doc_root_(doc_root) { beast::error_code ec; @@ -453,15 +451,16 @@ public: void do_accept() { + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); } void - on_accept(beast::error_code ec) + on_accept(beast::error_code ec, tcp::socket socket) { if(ec) { @@ -471,14 +470,11 @@ public: { // Create the session and run it std::make_shared( - std::move(socket_), + std::move(socket), ctx_, doc_root_)->run(); } - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - // Accept another connection do_accept(); } diff --git a/example/http/server/async/http_server_async.cpp b/example/http/server/async/http_server_async.cpp index b9efa92a..5749a50c 100644 --- a/example/http/server/async/http_server_async.cpp +++ b/example/http/server/async/http_server_async.cpp @@ -354,7 +354,6 @@ class listener : public std::enable_shared_from_this { net::io_context& ioc_; tcp::acceptor acceptor_; - tcp::socket socket_; std::shared_ptr doc_root_; public: @@ -364,7 +363,6 @@ public: std::shared_ptr const& doc_root) : ioc_(ioc) , acceptor_(beast::make_strand(ioc)) - , socket_(beast::make_strand(ioc)) , doc_root_(doc_root) { beast::error_code ec; @@ -415,15 +413,16 @@ public: void do_accept() { + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); } void - on_accept(beast::error_code ec) + on_accept(beast::error_code ec, tcp::socket socket) { if(ec) { @@ -433,13 +432,10 @@ public: { // Create the session and run it std::make_shared( - std::move(socket_), + std::move(socket), doc_root_)->run(); } - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - // Accept another connection do_accept(); } diff --git a/example/http/server/flex/http_server_flex.cpp b/example/http/server/flex/http_server_flex.cpp index fe0220c2..5a0bd0e3 100644 --- a/example/http/server/flex/http_server_flex.cpp +++ b/example/http/server/flex/http_server_flex.cpp @@ -541,7 +541,6 @@ class listener : public std::enable_shared_from_this net::io_context& ioc_; ssl::context& ctx_; tcp::acceptor acceptor_; - tcp::socket socket_; std::shared_ptr doc_root_; public: @@ -553,7 +552,6 @@ public: : ioc_(ioc) , ctx_(ctx) , acceptor_(beast::make_strand(ioc)) - , socket_(beast::make_strand(ioc)) , doc_root_(doc_root) { beast::error_code ec; @@ -604,15 +602,16 @@ public: void do_accept() { + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); } void - on_accept(beast::error_code ec) + on_accept(beast::error_code ec, tcp::socket socket) { if(ec) { @@ -622,14 +621,11 @@ public: { // Create the detector session and run it std::make_shared( - std::move(socket_), + std::move(socket), ctx_, doc_root_)->run(); } - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - // Accept another connection do_accept(); } diff --git a/example/websocket/server/async-ssl/websocket_server_async_ssl.cpp b/example/websocket/server/async-ssl/websocket_server_async_ssl.cpp index 5dcaef92..1c927a24 100644 --- a/example/websocket/server/async-ssl/websocket_server_async_ssl.cpp +++ b/example/websocket/server/async-ssl/websocket_server_async_ssl.cpp @@ -175,7 +175,6 @@ class listener : public std::enable_shared_from_this net::io_context& ioc_; ssl::context& ctx_; tcp::acceptor acceptor_; - tcp::socket socket_; public: listener( @@ -185,7 +184,6 @@ public: : ioc_(ioc) , ctx_(ctx) , acceptor_(beast::make_strand(ioc)) - , socket_(beast::make_strand(ioc)) { beast::error_code ec; @@ -235,15 +233,16 @@ public: void do_accept() { + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); } void - on_accept(beast::error_code ec) + on_accept(beast::error_code ec, tcp::socket socket) { if(ec) { @@ -252,12 +251,9 @@ public: else { // Create the session and run it - std::make_shared(std::move(socket_), ctx_)->run(); + std::make_shared(std::move(socket), ctx_)->run(); } - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - // Accept another connection do_accept(); } diff --git a/example/websocket/server/async/websocket_server_async.cpp b/example/websocket/server/async/websocket_server_async.cpp index 92417c9e..d347a1e4 100644 --- a/example/websocket/server/async/websocket_server_async.cpp +++ b/example/websocket/server/async/websocket_server_async.cpp @@ -148,7 +148,6 @@ class listener : public std::enable_shared_from_this { net::io_context& ioc_; tcp::acceptor acceptor_; - tcp::socket socket_; public: listener( @@ -156,7 +155,6 @@ public: tcp::endpoint endpoint) : ioc_(ioc) , acceptor_(ioc) - , socket_(beast::make_strand(ioc_)) { beast::error_code ec; @@ -206,15 +204,16 @@ public: void do_accept() { + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); } void - on_accept(beast::error_code ec) + on_accept(beast::error_code ec, tcp::socket socket) { if(ec) { @@ -223,12 +222,9 @@ public: else { // Create the session and run it - std::make_shared(std::move(socket_))->run(); + std::make_shared(std::move(socket))->run(); } - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - // Accept another connection do_accept(); } diff --git a/example/websocket/server/chat-multi/listener.cpp b/example/websocket/server/chat-multi/listener.cpp index 0ea91b59..b1d55222 100644 --- a/example/websocket/server/chat-multi/listener.cpp +++ b/example/websocket/server/chat-multi/listener.cpp @@ -18,7 +18,6 @@ listener( boost::shared_ptr const& state) : ioc_(ioc) , acceptor_(ioc) - , socket_(beast::make_strand(ioc)) , state_(state) { beast::error_code ec; @@ -61,9 +60,9 @@ void listener:: run() { - // Start accepting a connection + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); @@ -83,22 +82,19 @@ fail(beast::error_code ec, char const* what) // Handle a connection void listener:: -on_accept(beast::error_code ec) +on_accept(beast::error_code ec, tcp::socket socket) { if(ec) return fail(ec, "accept"); else // Launch a new session for this connection boost::make_shared( - std::move(socket_), + std::move(socket), state_)->run(); - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - - // Accept another connection + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &listener::on_accept, shared_from_this())); diff --git a/example/websocket/server/chat-multi/listener.hpp b/example/websocket/server/chat-multi/listener.hpp index 7c09bad2..f7c952e6 100644 --- a/example/websocket/server/chat-multi/listener.hpp +++ b/example/websocket/server/chat-multi/listener.hpp @@ -24,11 +24,10 @@ class listener : public boost::enable_shared_from_this { net::io_context& ioc_; tcp::acceptor acceptor_; - tcp::socket socket_; boost::shared_ptr state_; void fail(beast::error_code ec, char const* what); - void on_accept(beast::error_code ec); + void on_accept(beast::error_code ec, tcp::socket socket); public: listener( diff --git a/example/websocket/server/fast/websocket_server_fast.cpp b/example/websocket/server/fast/websocket_server_fast.cpp index da57d20e..ffdb7285 100644 --- a/example/websocket/server/fast/websocket_server_fast.cpp +++ b/example/websocket/server/fast/websocket_server_fast.cpp @@ -243,7 +243,6 @@ class async_listener : public std::enable_shared_from_this { net::io_context& ioc_; tcp::acceptor acceptor_; - tcp::socket socket_; public: async_listener( @@ -251,7 +250,6 @@ public: tcp::endpoint endpoint) : ioc_(ioc) , acceptor_(beast::make_strand(ioc)) - , socket_(beast::make_strand(ioc)) { beast::error_code ec; @@ -301,15 +299,16 @@ public: void do_accept() { + // The new connection gets its own strand acceptor_.async_accept( - socket_, + beast::make_strand(ioc_), beast::bind_front_handler( &async_listener::on_accept, shared_from_this())); } void - on_accept(beast::error_code ec) + on_accept(beast::error_code ec, tcp::socket socket) { if(ec) { @@ -318,12 +317,9 @@ public: else { // Create the async_session and run it - std::make_shared(std::move(socket_))->run(); + std::make_shared(std::move(socket))->run(); } - // Make sure each session gets its own strand - socket_ = tcp::socket(beast::make_strand(ioc_)); - // Accept another connection do_accept(); } diff --git a/include/boost/beast/core.hpp b/include/boost/beast/core.hpp index 10b4d894..aed3ef16 100644 --- a/include/boost/beast/core.hpp +++ b/include/boost/beast/core.hpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include