* Resolve #2017

* Fix warning

* Update README
This commit is contained in:
yhirose 2025-01-17 17:37:07 -05:00 committed by GitHub
parent 8311e1105f
commit 986a20fb7d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 1 deletions

View File

@ -125,6 +125,21 @@ int main(void)
res.set_content(req.body, "text/plain"); res.set_content(req.body, "text/plain");
}); });
// If the handler takes time to finish, you can also poll the connection state
svr.Get("/task", [&](const Request& req, Response& res) {
const char * result = nullptr;
process.run(); // for example, starting an external process
while (result == nullptr) {
sleep(1);
if (req.is_connection_closed()) {
process.kill(); // kill the process
return;
}
result = process.stdout(); // != nullptr if the process finishes
}
res.set_content(result, "text/plain");
});
svr.Get("/stop", [&](const Request& req, Response& res) { svr.Get("/stop", [&](const Request& req, Response& res) {
svr.stop(); svr.stop();
}); });

View File

@ -628,6 +628,7 @@ struct Request {
Ranges ranges; Ranges ranges;
Match matches; Match matches;
std::unordered_map<std::string, std::string> path_params; std::unordered_map<std::string, std::string> path_params;
std::function<bool()> is_connection_closed = []() { return true; };
// for client // for client
ResponseHandler response_handler; ResponseHandler response_handler;
@ -2572,7 +2573,7 @@ inline bool is_field_content(const std::string &s) {
inline bool is_field_value(const std::string &s) { return is_field_content(s); } inline bool is_field_value(const std::string &s) { return is_field_content(s); }
}; // namespace fields } // namespace fields
} // namespace detail } // namespace detail
@ -7217,6 +7218,11 @@ Server::process_request(Stream &strm, const std::string &remote_addr,
} }
} }
// Setup `is_connection_closed` method
req.is_connection_closed = [&]() {
return !detail::is_socket_alive(strm.socket());
};
// Routing // Routing
auto routed = false; auto routed = false;
#ifdef CPPHTTPLIB_NO_EXCEPTIONS #ifdef CPPHTTPLIB_NO_EXCEPTIONS