From fe519bd2a054cd1da746d2d9b82843379c2067df Mon Sep 17 00:00:00 2001 From: nuczzz Date: Sun, 20 Jan 2019 11:17:10 +0800 Subject: [PATCH] update tls KeepAlive setting --- grace/server.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/grace/server.go b/grace/server.go index e5302baa..1ce8bc78 100644 --- a/grace/server.go +++ b/grace/server.go @@ -14,6 +14,7 @@ import ( "os/signal" "strings" "syscall" + "time" ) // Server embedded http.Server @@ -116,7 +117,7 @@ func (srv *Server) ListenAndServeTLS(certFile, keyFile string) (err error) { log.Println(err) return err } - srv.ln = tls.NewListener(ln, srv.TLSConfig) + srv.ln = tls.NewListener(tcpKeepAliveListener{ln.(*net.TCPListener)}, srv.TLSConfig) if srv.isChild { process, err := os.FindProcess(os.Getppid()) @@ -171,7 +172,7 @@ func (srv *Server) ListenAndServeMutualTLS(certFile, keyFile, trustFile string) log.Println(err) return err } - srv.ln = tls.NewListener(ln, srv.TLSConfig) + srv.ln = tls.NewListener(tcpKeepAliveListener{ln.(*net.TCPListener)}, srv.TLSConfig) if srv.isChild { process, err := os.FindProcess(os.Getppid()) @@ -215,6 +216,20 @@ func (srv *Server) getListener(laddr string) (l net.Listener, err error) { return } +type tcpKeepAliveListener struct { + *net.TCPListener +} + +func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { + tc, err := ln.AcceptTCP() + if err != nil { + return + } + tc.SetKeepAlive(true) + tc.SetKeepAlivePeriod(3 * time.Minute) + return tc, nil +} + // handleSignals listens for os Signals and calls any hooked in function that the // user had registered with the signal. func (srv *Server) handleSignals() {