From cd53f7d5023741301aabb5a7274ed0dd024fbd2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E6=89=87=E6=BB=91=E7=BF=94=E7=BF=BC?= Date: Tue, 21 Oct 2025 15:10:59 +0000 Subject: [PATCH] Close target when client closed --- tls.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tls.go b/tls.go index 8d6cde1..add597a 100644 --- a/tls.go +++ b/tls.go @@ -272,7 +272,17 @@ func Server(ctx context.Context, conn net.Conn, config *Config) (*Conn, error) { if config.Show && hs.clientHello != nil { fmt.Printf("REALITY remoteAddr: %v\tforwarded SNI: %v\n", remoteAddr, hs.clientHello.serverName) } - io.Copy(target, NewRatelimitedConn(underlying, &config.LimitFallbackUpload)) + _, err := io.Copy(target, NewRatelimitedConn(underlying, &config.LimitFallbackUpload)) + // close target writer when received FIN (err==nil) + if err == nil { + targetWriterCloser, ok := target.(CloseWriteConn) + if ok { + targetWriterCloser.CloseWrite() + } + } else { + // Close target when encountering RST (or any other errors) + target.Close() + } } waitGroup.Done() }()