apiserver: fix secure serving cast for non-tcp listeners

This commit is contained in:
Dr. Stefan Schimanski 2020-06-16 13:31:32 +02:00
parent 1fa20301a0
commit 2c3687c255

View File

@ -218,7 +218,7 @@ func RunServer(
defer utilruntime.HandleCrash() defer utilruntime.HandleCrash()
var listener net.Listener var listener net.Listener
listener = tcpKeepAliveListener{ln.(*net.TCPListener)} listener = tcpKeepAliveListener{ln}
if server.TLSConfig != nil { if server.TLSConfig != nil {
listener = tls.NewListener(listener, server.TLSConfig) listener = tls.NewListener(listener, server.TLSConfig)
} }
@ -244,15 +244,17 @@ func RunServer(
// //
// Copied from Go 1.7.2 net/http/server.go // Copied from Go 1.7.2 net/http/server.go
type tcpKeepAliveListener struct { type tcpKeepAliveListener struct {
*net.TCPListener net.Listener
} }
func (ln tcpKeepAliveListener) Accept() (net.Conn, error) { func (ln tcpKeepAliveListener) Accept() (net.Conn, error) {
tc, err := ln.AcceptTCP() c, err := ln.Listener.Accept()
if err != nil { if err != nil {
return nil, err return nil, err
} }
if tc, ok := c.(*net.TCPConn); ok {
tc.SetKeepAlive(true) tc.SetKeepAlive(true)
tc.SetKeepAlivePeriod(defaultKeepAlivePeriod) tc.SetKeepAlivePeriod(defaultKeepAlivePeriod)
return tc, nil }
return c, nil
} }