diff --git a/src/network/TrafficLightHttpServer.cpp b/src/network/TrafficLightHttpServer.cpp index 35d3ac8..a6805a7 100644 --- a/src/network/TrafficLightHttpServer.cpp +++ b/src/network/TrafficLightHttpServer.cpp @@ -5,12 +5,10 @@ #include #include #include -#include #include #include #include #include -#include #include #include #include @@ -110,17 +108,19 @@ namespace network { system_(system_ref) {} void run() { - net::dispatch(strand_, boost::bind(&TrafficLightSession::do_read, shared_from_this())); + net::dispatch(strand_, [self = shared_from_this()]() { + self->do_read(); + }); } private: void do_read() { - req_ = {}; + req_ = {}; // 清空请求对象以便重用 http::async_read(socket_, buffer_, req_, net::bind_executor(strand_, - boost::bind(&TrafficLightSession::on_read, shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred) + [self = shared_from_this()](beast::error_code ec, std::size_t bytes_transferred) { + self->on_read(ec, bytes_transferred); + } )); } @@ -274,30 +274,30 @@ namespace network { void do_accept() { acceptor_.async_accept( net::bind_executor(acceptor_.get_executor(), - boost::bind(&TrafficLightListener::on_accept, shared_from_this(), - boost::asio::placeholders::error, - boost::placeholders::_2) + [self = shared_from_this()](beast::error_code ec, tcp::socket socket) { // socket 按值传递 + if (ec) { + if (ec == net::error::operation_aborted) { + return; // 服务器停止,不再接受 + } + Logger::error("Listener Accept Error: ", ec.message()); + // 对于其他错误,我们仍然尝试继续接受,除非 acceptor 关闭 + } else { + Logger::info("Accepted connection from ", socket.remote_endpoint()); + std::make_shared( + std::move(socket), // 从 lambda 的参数 socket 移动 + self->doc_root_, // 访问 listener 的成员 + self->ioc_, // 访问 listener 的成员 + self->system_ // 访问 listener 的成员 + )->run(); + } + + if (self->acceptor_.is_open()) { + self->do_accept(); // 继续接受下一个连接 + } + } ) ); } - - void on_accept(beast::error_code ec, tcp::socket&& socket) { - if (ec) { - if (ec != net::error::operation_aborted) - Logger::error("Listener Accept Error: ", ec.message()); - return; - } else { - // 移除连接数检查简化注释 - Logger::info("Accepted connection from ", socket.remote_endpoint()); - std::make_shared( - std::move(socket), - doc_root_, - ioc_, - system_ - )->run(); - } - do_accept(); - } }; //---------------- TrafficLightHttpServer Implementation -------------------