From 0a5f34a2ef713826d4f3571a3362f60a91fdc84f Mon Sep 17 00:00:00 2001 From: benjamin Date: Fri, 10 Jul 2026 10:11:21 +0800 Subject: [PATCH] fix(openai): recognize Windows websocket resets --- backend/internal/service/openai_ws_forwarder_ingress_test.go | 1 + backend/internal/service/openai_ws_forwarder_logutil.go | 1 + 2 files changed, 2 insertions(+) diff --git a/backend/internal/service/openai_ws_forwarder_ingress_test.go b/backend/internal/service/openai_ws_forwarder_ingress_test.go index ca7c36aaa7..1d18c46fca 100644 --- a/backend/internal/service/openai_ws_forwarder_ingress_test.go +++ b/backend/internal/service/openai_ws_forwarder_ingress_test.go @@ -33,6 +33,7 @@ func TestIsOpenAIWSClientDisconnectError(t *testing.T) { {name: "ws_policy_violation", err: coderws.CloseError{Code: coderws.StatusPolicyViolation}, want: false}, {name: "wrapped_eof_message", err: errors.New("failed to get reader: failed to read frame header: EOF"), want: true}, {name: "connection_reset_by_peer", err: errors.New("failed to read frame header: read tcp 127.0.0.1:1234->127.0.0.1:5678: read: connection reset by peer"), want: true}, + {name: "windows_connection_reset", err: errors.New("failed to get reader: failed to read frame header: read tcp 127.0.0.1:1234->127.0.0.1:5678: wsarecv: An existing connection was forcibly closed by the remote host."), want: true}, {name: "broken_pipe", err: errors.New("write tcp 127.0.0.1:1234->127.0.0.1:5678: write: broken pipe"), want: true}, } diff --git a/backend/internal/service/openai_ws_forwarder_logutil.go b/backend/internal/service/openai_ws_forwarder_logutil.go index 611938091d..04d1fb4a75 100644 --- a/backend/internal/service/openai_ws_forwarder_logutil.go +++ b/backend/internal/service/openai_ws_forwarder_logutil.go @@ -660,6 +660,7 @@ func isOpenAIWSClientDisconnectError(err error) bool { strings.Contains(message, "use of closed network connection") || strings.Contains(message, "connection reset by peer") || strings.Contains(message, "broken pipe") || + strings.Contains(message, "an existing connection was forcibly closed by the remote host") || strings.Contains(message, "an established connection was aborted") }