luci-app-mosdns/mosdns/patches/125-upstream-doq-send-STREAM-FIN-after-query-is-sent.patch
2023-09-23 15:17:07 +08:00

33 lines
1.0 KiB
Diff

From 1fa552cbe353e6467d33bd9366712ad150f06af0 Mon Sep 17 00:00:00 2001
From: Irine Sistiana <49315432+IrineSistiana@users.noreply.github.com>
Date: Sat, 23 Sep 2023 14:29:25 +0800
Subject: [PATCH 9/9] upstream/doq: send STREAM FIN after query is sent
fixed #720
---
pkg/upstream/doq/upstream.go | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/pkg/upstream/doq/upstream.go b/pkg/upstream/doq/upstream.go
index 23d7f1c..78d30db 100644
--- a/pkg/upstream/doq/upstream.go
+++ b/pkg/upstream/doq/upstream.go
@@ -242,6 +242,14 @@ func (u *Upstream) exchange(s quic.Stream, payload []byte) (*dns.Msg, error) {
return nil, err
}
+ // RFC 9250 4.2
+ // The client MUST send the DNS query over the selected stream and MUST
+ // indicate through the STREAM FIN mechanism that no further data will
+ // be sent on that stream.
+ //
+ // Call Close() here will send the STREAM FIN. It won't close Read.
+ s.Close()
+
resp, _, err := dnsutils.ReadMsgFromTCP(s)
if err != nil {
return nil, err
--
2.34.8