Skip to content

Commit bf78ffa

Browse files
committed
UPD | resolve tcp/tls close_connection
1 parent 3052798 commit bf78ffa

File tree

5 files changed

+36
-17
lines changed

5 files changed

+36
-17
lines changed

package/DEBIAN/changelog

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
manapihttp (1.0.3+dfsg-1) unstable; urgency=high
1+
manapihttp (1.0.4+dfsg-1) unstable; urgency=high
22
* Bug fixes
3-
-- Timur Zajnullin <me@timurtuty.ru> Wed, 15 Nov 2025 12:05:00 +0000
3+
-- Timur Zajnullin <me@timurtuty.ru> Wed, 8 Dec 2025 10:00:00 +0000

package/DEBIAN/control

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: manapihttp
22
Provides: manapihttp
3-
Version: 1.0.3
3+
Version: 1.0.4
44
Section: libs
55
Installed-Size:
66
Maintainer: Xiadnoring <me@timurtuty.ru>

src/worker/ManapiTcp.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,9 +388,12 @@ void manapi::net::worker::TCP::close_connection(shared_conn conn, int flags) MAN
388388

389389
auto connection = conn->as<tcp_connection_t>();
390390

391+
if (flags & CLOSE_CONN_EOR || flags & CLOSE_CONN_EOS) {
392+
conn->wrk.flags |= WRK_INTERFACE_IS_DRAINING;
393+
}
394+
391395
/* Draining timeout is enabled, thus, connection is draining */
392396
if ((flags & CLOSE_CONN_EOR)) {
393-
conn->wrk.flags |= WRK_INTERFACE_IS_DRAINING;
394397
connection->flags |= CONN_RECV_END;
395398

396399
if (connection->flags == CLOSE_CONN_EOR) {
@@ -400,10 +403,13 @@ void manapi::net::worker::TCP::close_connection(shared_conn conn, int flags) MAN
400403
}
401404
}
402405

403-
if (flags & CLOSE_CONN_FINISHED) {
406+
if (flags & (CLOSE_CONN_FINISHED|CLOSE_CONN_SHUTDOWN) && !(flags & (CLOSE_CONN_EOS|CLOSE_CONN_ERR))) {
404407
connection->flags |= CONN_RECV_END;
405408
connection->flags |= CONN_SEND_END;
406409

410+
manapi_log_trace(manapi::debug::LOG_TRACE_LOW, "tcp:closing the connection %p with CLOSE_CONN_FINISHED "
411+
"top->cur_send_size=%d top->send_size=%d", conn.get(), connection->top->cur_send_size, connection->top->send_size);
412+
407413
if (connection->top->cur_send_size != connection->top->send_size) {
408414
// wait
409415
return;

src/worker/ManapiTlsOverTcp.cpp

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ void manapi::net::worker::TLS::close_connection(shared_conn conn, int flags) MAN
5454
if (!conn)
5555
return;
5656

57-
this->waiting(conn, true);
5857
auto const connection = conn->as<tls_connection_t>();
58+
bool keep_alive_disabled;
5959

6060
if (connection->flags & CONN_REMOVED)
6161
return;
@@ -69,23 +69,33 @@ void manapi::net::worker::TLS::close_connection(shared_conn conn, int flags) MAN
6969
return;
7070
}
7171

72+
/* Draining timeout is enabled, thus, connection is draining */
73+
if (flags & CLOSE_CONN_EOR || flags & CLOSE_CONN_EOS) {
74+
conn->wrk.flags |= WRK_INTERFACE_IS_DRAINING;
75+
}
76+
77+
if ((flags & CLOSE_CONN_EOR)) {
78+
connection->flags |= CONN_RECV_END;
79+
80+
if (connection->flags == CLOSE_CONN_EOR) {
81+
if (!connection->t && !(connection->flags & CONN_READ)) {
82+
return;
83+
}
84+
}
85+
}
86+
87+
this->waiting(conn, true);
7288
connection->flags |= CONN_TLS_SHUTDOWN;
7389

74-
if (!this->config_->force_conn_shutdown
75-
&& (
76-
(flags & (CLOSE_CONN_SHUTDOWN|CLOSE_CONN_ERR))
77-
|| (!flags
78-
&& (!this->config_->keep_alive
79-
|| !(conn->wrk.flags & WRK_INTERFACE_TCP_KEEP_ALIVE)
80-
)
81-
))) {
90+
keep_alive_disabled = (!this->config_->keep_alive || !(conn->wrk.flags & WRK_INTERFACE_TCP_KEEP_ALIVE));
91+
if (!this->config_->force_conn_shutdown && ((flags & (CLOSE_CONN_SHUTDOWN|CLOSE_CONN_ERR)) || (!flags && keep_alive_disabled))) {
8292

8393
if (conn->wrk.flags & WRK_INTERFACE_TCP_KEEP_ALIVE)
8494
conn->wrk.flags ^= WRK_INTERFACE_TCP_KEEP_ALIVE;
8595

8696
if (connection->ev_callback) {
8797
auto cb = std::move(connection->ev_callback);
88-
if (this->call_user_callback(&cb, conn, ev::DISCONNECT, nullptr, 0, nullptr)) {
98+
if (manapi::net::worker::TLS::call_user_callback(&cb, conn, ev::DISCONNECT, nullptr, 0, nullptr)) {
8999
/* skip */
90100
}
91101
}
@@ -99,10 +109,13 @@ void manapi::net::worker::TLS::close_connection(shared_conn conn, int flags) MAN
99109

100110
eof:
101111
if (flags & (CLOSE_CONN_EOR|CLOSE_CONN_EOS)) {
112+
manapi_log_trace(manapi::debug::LOG_TRACE_LOW, "TLS:conn %p was destroyed "
113+
"CLOSE_CONN_EOR=%d CLOSE_CONN_EOS=%d", conn.get(),
114+
CLOSE_CONN_EOR & flags, CLOSE_CONN_EOS & flags);
102115
this->ssl_set_shutdown_(connection->ssl,
103116
this->ssl_recv_shutdown_|this->ssl_send_shutdown_);
104117
/* connection is destroyed */
105-
flags |= CLOSE_CONN_FINISHED;
118+
flags |= CLOSE_CONN_SHUTDOWN;
106119
}
107120
//
108121
// if (connection->accept_timer) {

utils/cmake-ubuntu22.04-dbg.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ fi
3434
ROOT=$(pwd)
3535

3636
# 2) configure
37-
cmake -B build-dbg -DCMAKE_BUILD_TYPE=Debug -DMANAPIHTTP_GRPC_DEPENDENCY=OFF -DMANAPIHTTP_DISABLE_TRACE_HARD=ON \
37+
cmake -B build-dbg -DCMAKE_BUILD_TYPE=Debug -DMANAPIHTTP_GRPC_DEPENDENCY=OFF -DMANAPIHTTP_DISABLE_TRACE_HARD=OFF \
3838
-DMANAPIHTTP_BUILD_TYPE=lib -DMANAPIHTTP_JSON_DEBUG=ON -DMANAPIHTTP_NGHTTP2_DEPENDENCY=ON -DMANAPIHTTP_NGHTTP3_DEPENDENCY=OFF \
3939
-DMANAPIHTTP_OPENSSL_DEPENDENCY=ON -DMANAPIHTTP_WOFLSSL_DEPENDENCY=OFF -DMANAPIHTTP_BROTLI_DEPENDENCY=ON -DMANAPIHTTP_ZSTD_DEPENDENCY=ON \
4040
-DMANAPIHTTP_ZLIB_DEPENDENCY=ON -DBUILD_SHARED_LIBS=ON -DMANAPIHTTP_STD_BACKTRACE_DEPENDENCY=OFF -DCMAKE_INSTALL_PREFIX=$(pwd)/package/usr \

0 commit comments

Comments
 (0)