Fix HTTP: Idle keep-alive connections are never closed

This commit is contained in:
Stalwart Official committed 2026-09-27 15:54:00 +02:00
1 parent 69317e49cf
commit dc1146ae14
3 files changed
+6 -2

No files matched your search

+2
View File
@@ -29,8 +29,10 @@ If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If
- MTA:
- A node without the `outboundMta` role stops replying to `DATA` and to JMAP submissions once about 1024 messages have been queued on it.
- MX records are resolved through the DNSSEC-validating resolver even when DANE is disabled.
- A `DATA` stage Sieve script does not see headers added by milters or MTA hooks, and discards every milter and MTA hook change when it edits the message.
- MySQL: Range deletions and search index removals start with a single unbounded `DELETE` and switch to chunks only after a timeout.
- Autodiscover: Implicit TLS ports (993, 995, 465) are advertised with `<Encryption>TLS</Encryption>`, which Outlook reads as STARTTLS.
- HTTP: Idle keep-alive connections are never closed.
## [0.16.23] - 2026-09-21
+3 -1
View File
@@ -34,7 +34,7 @@ use hyper::{
server::conn::http1,
service::service_fn,
};
use hyper_util::rt::TokioIo;
use hyper_util::rt::{TokioIo, TokioTimer};
use jmap::{
api::{
ToJmapHttpResponse, event_source::EventSourceHandler, request::RequestHandler,
@@ -735,6 +735,7 @@ async fn handle_session<T: SessionStream>(inner: Arc<Inner>, session: SessionDat
let is_tls = session.stream.is_tls();
if let Err(http_err) = http1::Builder::new()
.timer(TokioTimer::new())
.keep_alive(true)
.serve_connection(
TokioIo::new(session.stream),
@@ -879,6 +880,7 @@ async fn handle_session<T: SessionStream>(inner: Arc<Inner>, session: SessionDat
)
.with_upgrades()
.await
&& !http_err.is_timeout()
{
if http_err.is_parse() {
let server = inner.build_server();
+1 -1
View File
@@ -132,7 +132,7 @@ impl<T: SessionStream> Session<T> {
name: "X-Quarantine".into(),
value: "true".into(),
});
FilterResponse::accept()
continue;
}
};