From 3168d27b0bdbbe7e6a969bf9482af717e14cf483 Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 18 May 2024 11:56:05 -0400 Subject: [PATCH] Splice update timer to 8 hours --- proxy/proxy.go | 3 ++- proxy/vless/encoding/encoding.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/proxy/proxy.go b/proxy/proxy.go index 2507d029..ba909197 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -470,7 +470,7 @@ func UnwrapRawConn(conn net.Conn) (net.Conn, stats.Counter, stats.Counter) { // CopyRawConnIfExist use the most efficient copy method. // - If caller don't want to turn on splice, do not pass in both reader conn and writer conn // - writer are from *transport.Link -func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net.Conn, writer buf.Writer, timer signal.ActivityUpdater) error { +func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net.Conn, writer buf.Writer, timer *signal.ActivityTimer) error { readerConn, readCounter, _ := UnwrapRawConn(readerConn) writerConn, _, writeCounter := UnwrapRawConn(writerConn) reader := buf.NewReader(readerConn) @@ -509,6 +509,7 @@ func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net statWriter, _ := writer.(*dispatcher.SizeStatWriter) //runtime.Gosched() // necessary time.Sleep(time.Millisecond) // without this, there will be a rare ssl error for freedom splice + timer.SetTimeout(8 * time.Hour) // prevent leak, just in case w, err := tc.ReadFrom(readerConn) if readCounter != nil { readCounter.Add(w) // outbound stats diff --git a/proxy/vless/encoding/encoding.go b/proxy/vless/encoding/encoding.go index 9bfea829..cb558584 100644 --- a/proxy/vless/encoding/encoding.go +++ b/proxy/vless/encoding/encoding.go @@ -174,7 +174,7 @@ func DecodeResponseHeader(reader io.Reader, request *protocol.RequestHeader) (*A } // XtlsRead filter and read xtls protocol -func XtlsRead(reader buf.Reader, writer buf.Writer, timer signal.ActivityUpdater, conn net.Conn, input *bytes.Reader, rawInput *bytes.Buffer, trafficState *proxy.TrafficState, ob *session.Outbound, ctx context.Context) error { +func XtlsRead(reader buf.Reader, writer buf.Writer, timer *signal.ActivityTimer, conn net.Conn, input *bytes.Reader, rawInput *bytes.Buffer, trafficState *proxy.TrafficState, ob *session.Outbound, ctx context.Context) error { err := func() error { for { if trafficState.ReaderSwitchToDirectCopy {