Merge pull request #120975 from ardaguclu/close-heartbeat-explicitly

Close websocket heartbeat explicitly when unexpected closure received

Kubernetes-commit: d0dfe6433444fb114fc119a8b1066e1601f049fe
This commit is contained in:
Kubernetes Publisher 2023-10-06 09:05:47 +02:00
commit 5b14e64aff

View File

@ -18,8 +18,10 @@ package remotecommand
import (
"context"
"errors"
"fmt"
"io"
"net"
"net/http"
"sync"
"time"
@ -476,9 +478,18 @@ func (h *heartbeat) start() {
klog.V(8).Infof("Websocket Ping succeeeded")
} else {
klog.Errorf("Websocket Ping failed: %v", err)
// Continue, in case this is a transient failure.
// c.conn.CloseChan above will tell us when the connection is
// actually closed.
if errors.Is(err, gwebsocket.ErrCloseSent) {
// we continue because c.conn.CloseChan will manage closing the connection already
continue
} else if e, ok := err.(net.Error); ok && e.Timeout() {
// Continue, in case this is a transient failure.
// c.conn.CloseChan above will tell us when the connection is
// actually closed.
// If Temporary function hadn't been deprecated, we would have used it.
// But most of temporary errors are timeout errors anyway.
continue
}
return
}
}
}