From 46b46e00f46dda650e04f0bceeb7c40732cd5988 Mon Sep 17 00:00:00 2001 From: Carl Jackson Date: Tue, 4 Aug 2015 00:23:56 -0700 Subject: [PATCH] graceful: opportunistic keep-alives for Serve --- graceful/server.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/graceful/server.go b/graceful/server.go index 40c1d23..8b17295 100644 --- a/graceful/server.go +++ b/graceful/server.go @@ -96,8 +96,13 @@ func ListenAndServeTLS(addr, certfile, keyfile string, handler http.Handler) err return server.ListenAndServeTLS(certfile, keyfile) } -// Serve behaves exactly like the net/http function of the same name. +// Serve mostly behaves like the net/http function of the same name, except that +// if the passed listener is a net.TCPListener, TCP keep-alives are enabled on +// accepted connections. func Serve(l net.Listener, handler http.Handler) error { + if tl, ok := l.(*net.TCPListener); ok { + l = tcpKeepAliveListener{tl} + } server := &Server{Handler: handler} return server.Serve(l) }