package http import ( "time" "net" ) func NewListener(addr *net.TCPAddr) (net.Listener, error) { listener, err := net.ListenTCP("tcp", addr) if err != nil { return nil, err } return &keepAliveListener{Listener: listener}, nil } type keepAliveListener struct { // the number of open connections net.Listener } func (ln *keepAliveListener) Accept() (c net.Conn, err error) { c, err = ln.Listener.Accept() if err != nil { return } if tc, ok := c.(*net.TCPConn); ok { tc.SetKeepAlive(true) tc.SetKeepAlivePeriod(3 * time.Minute) } return }