From de38a8e881975109ea493781a4069b8e727deb55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Thu, 24 Aug 2023 11:07:22 +0800 Subject: [PATCH] Fix sniffer --- common/sniff/sniff.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/common/sniff/sniff.go b/common/sniff/sniff.go index 4d990092..7a8bcec8 100644 --- a/common/sniff/sniff.go +++ b/common/sniff/sniff.go @@ -22,19 +22,24 @@ func PeekStream(ctx context.Context, conn net.Conn, buffer *buf.Buffer, timeout if timeout == 0 { timeout = C.ReadPayloadTimeout } - err := conn.SetReadDeadline(time.Now().Add(timeout)) - if err != nil { - return nil, E.Cause(err, "set read deadline") + deadline := time.Now().Add(timeout) + for i := 0; ; i++ { + err := conn.SetReadDeadline(deadline) + if err != nil { + return nil, E.Cause(err, "set read deadline") + } + _, err = buffer.ReadOnceFrom(conn) + err = E.Errors(err, conn.SetReadDeadline(time.Time{})) + if i > 0 { + break + } + if err != nil { + return nil, E.Cause(err, "read payload") + } } - _, err = buffer.ReadOnceFrom(conn) - err = E.Errors(err, conn.SetReadDeadline(time.Time{})) - if err != nil { - return nil, E.Cause(err, "read payload") - } - var metadata *adapter.InboundContext var errors []error for _, sniffer := range sniffers { - metadata, err = sniffer(ctx, bytes.NewReader(buffer.Bytes())) + metadata, err := sniffer(ctx, bytes.NewReader(buffer.Bytes())) if metadata != nil { return metadata, nil }