Skip to content

Commit 3052798

Browse files
committed
UPD | wait all packets
1 parent 8fe48a8 commit 3052798

File tree

2 files changed

+51
-41
lines changed

2 files changed

+51
-41
lines changed

main.cpp

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,34 @@
1+
#include <iostream>
2+
13
#include <ManapiHttp.hpp>
24
#include <ManapiInitTools.hpp>
35

4-
int main () {
5-
/* creates 2 threads for blocking I/O syscalls */
6-
manapi::async::context::threadpoolfs(2);
7-
/* disable several signals */
8-
manapi::async::context::gbs (manapi::async::context::blockedsignals());
9-
/* creates 4 additional threads for 4 additional event loops */
10-
auto ctx = manapi::async::context::create(4).unwrap();
11-
/* HTTP context for multiple HTTP routers (threadsafe) */
12-
auto router_ctx = manapi::net::http::server_ctx::create().unwrap();
13-
/* runs main event loop and 4 additional event loops */
14-
ctx->run(4, [router_ctx] (std::function<void()> bind) -> void {
15-
using http = manapi::net::http::server;
6+
#define FOLDER "/home/Timur/Downloads/anime-main/"
7+
int main() {
8+
manapi::init_tools::log_trace_init(manapi::debug::LOG_TRACE_HARD);
169

17-
auto router = manapi::net::http::server::create(router_ctx).unwrap();
10+
manapi::async::context::threadpoolfs(4);
11+
manapi::async::context::gbs(manapi::async::context::blockedsignals());
1812

19-
router.GET("/[test]/+custom", [] (http::req &req, http::uresp resp) mutable -> void {
20-
resp->text(std::format("{}, test={}", std::string{req.url()}, req.param("test").unwrap()));
21-
}).unwrap();
13+
auto ctx = manapi::async::context::create(0).unwrap();
2214

23-
router.GET("/user/[zone]-[id]", [] (http::req &req, http::uresp resp) mutable -> void {
24-
resp->text(std::format("zone={} id={}", req.param("zone").unwrap(),
25-
req.param("id").unwrap())).unwrap();
15+
auto server_ctx = manapi::net::http::server_ctx::create().unwrap();
16+
ctx->run(0, [server_ctx] (auto cb) -> void {
17+
using http = manapi::net::http::server;
18+
auto route = manapi::net::http::server::create(server_ctx).unwrap();
19+
20+
route.GET ("/", [] (http::req &req, http::uresp resp) -> void {
21+
resp->file (manapi::filesystem::path::join(FOLDER, "index.html")).unwrap();
2622
}).unwrap();
2723

28-
manapi::async::run([router] () mutable -> manapi::future<> {
29-
manapi::unwrap(co_await router.config_object({
30-
{"pools", manapi::json::array({
31-
{
32-
{"address", "127.0.0.1"},
33-
{"http", manapi::json::array({"1.1"})},
34-
{"port", "8888"}
35-
}
36-
})},
37-
{"save_config", false}
38-
}));
39-
40-
manapi::unwrap(co_await router.start());
24+
route.GET ("/", FOLDER).unwrap();
25+
26+
manapi::async::run ([route] () mutable -> manapi::future<> {
27+
manapi::unwrap(co_await route.config(manapi::filesystem::path::join(".", "config.json")));
28+
manapi::unwrap(co_await route.start ());
4129
});
4230

43-
/* bind event loop in the current context */
44-
bind();
31+
cb();
4532
}).unwrap();
4633

4734
manapi::clear_tools::curl_library_clear();

src/worker/ManapiTcp.cpp

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,19 @@ void manapi::net::worker::TCP::close_connection(shared_conn conn, int flags) MAN
393393
conn->wrk.flags |= WRK_INTERFACE_IS_DRAINING;
394394
connection->flags |= CONN_RECV_END;
395395

396-
if (!connection->t && !(connection->flags & CONN_READ)) {
396+
if (connection->flags == CLOSE_CONN_EOR) {
397+
if (!connection->t && !(connection->flags & CONN_READ)) {
398+
return;
399+
}
400+
}
401+
}
402+
403+
if (flags & CLOSE_CONN_FINISHED) {
404+
connection->flags |= CONN_RECV_END;
405+
connection->flags |= CONN_SEND_END;
406+
407+
if (connection->top->cur_send_size != connection->top->send_size) {
408+
// wait
397409
return;
398410
}
399411
}
@@ -795,15 +807,26 @@ int manapi::net::worker::TCP::flush_write_(const worker::shared_conn &connection
795807
manapi_log_trace(manapi::debug::LOG_TRACE_LOW, "write failed msg=%s %p conn",
796808
ev::strerror(status), connection.get());
797809
conn->worker->close_connection(connection, CLOSE_CONN_EOS);
810+
return;
798811
}
799-
else {
800-
if ((conn->flags & (ev::WRITE|ev::DISCONNECT)) == ev::WRITE && conn->ev_callback) {
801-
if (base::call_user_callback(&conn->ev_callback, connection, ev::WRITE, nullptr, 0, nullptr))
802-
conn->worker->close_connection(connection, CLOSE_CONN_ERR);
812+
813+
if ((conn->flags & (ev::WRITE|ev::DISCONNECT)) == ev::WRITE && conn->ev_callback) {
814+
if (base::call_user_callback(&conn->ev_callback, connection, ev::WRITE, nullptr, 0, nullptr)) {
815+
conn->worker->close_connection(connection, CLOSE_CONN_ERR);
816+
return;
803817
}
818+
}
819+
820+
if (conn->flags & ev::DISCONNECT) {
821+
conn->worker->close_connection(connection, CLOSE_CONN_SHUTDOWN);
822+
return;
823+
}
804824

805-
if (conn->flags & ev::DISCONNECT)
806-
conn->worker->close_connection(connection, CLOSE_CONN_SHUTDOWN);
825+
if (conn->flags & CONN_SEND_END && conn->flags & CONN_RECV_END) {
826+
manapi_log_trace(manapi::debug::LOG_TRACE_LOW, "packets were sent after the closing conn %p",
827+
connection.get());
828+
conn->worker->close_connection(connection, CLOSE_CONN_FINISHED);
829+
return;
807830
}
808831

809832
}, buffptr, nbuff /* nbuf */);

0 commit comments

Comments
 (0)