From 9741df915a1ae4affa03b03ac67820aebee2a871 Mon Sep 17 00:00:00 2001 From: Tong Jia Date: Fri, 27 Jul 2018 10:54:40 -0400 Subject: [PATCH] CloseAbnormalClosure(1006) and CloseTLSHandshake(1015) should not be forwarded as close frame --- websocketproxy.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/websocketproxy.go b/websocketproxy.go index 29f5bda..8c23ec2 100644 --- a/websocketproxy.go +++ b/websocketproxy.go @@ -181,11 +181,18 @@ func (w *WebsocketProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) { m := websocket.FormatCloseMessage(websocket.CloseNormalClosure, fmt.Sprintf("%v", err)) if e, ok := err.(*websocket.CloseError); ok { if e.Code != websocket.CloseNoStatusReceived { - m = websocket.FormatCloseMessage(e.Code, e.Text) + m = nil + // Following codes are not valid on the wire so just close the + // underlying TCP connection without sending a close frame. + if e.Code != websocket.CloseAbnormalClosure && e.Code != websocket.CloseTLSHandshake { + m = websocket.FormatCloseMessage(e.Code, e.Text) + } } } errc <- err - dst.WriteMessage(websocket.CloseMessage, m) + if m != nil { + dst.WriteMessage(websocket.CloseMessage, m) + } break } err = dst.WriteMessage(msgType, msg)