"syscall"
"time"
+ "github.com/davecgh/go-spew/spew"
"golang.org/x/net/netutil"
"go.stargrave.org/godlighty"
- _ "go.stargrave.org/godlighty/rc"
+ _ "go.stargrave.org/godlighty/rc/cfg"
)
const MaxConns = 128
-var GracefulTime = 10 * time.Second
+var (
+ GracefulTime = 10 * time.Second
+ RWTimeout = 30 * time.Second
+)
func main() {
bind := flag.String("bind", "[::]:80", "Address to bind and listen on")
shutdown := make(chan os.Signal)
signal.Notify(shutdown, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP)
exitErr := make(chan error)
- l, err := net.Listen("tcp", *bind)
+ l, err := godlighty.DeadlinedListen("tcp", *bind, RWTimeout, RWTimeout)
if err != nil {
log.Fatalln(err)
}
}
}
- srv := http.Server{Handler: godlighty.MainHandler}
+ info := make(chan os.Signal)
+ signal.Notify(info, InfoSignal)
+ go func() {
+ for {
+ <-info
+ spew.Fdump(os.Stdout, godlighty.Hosts)
+ }
+ }()
+
+ srv := http.Server{
+ Handler: godlighty.MainHandler,
+ ReadHeaderTimeout: RWTimeout,
+ IdleTimeout: time.Minute,
+ }
go func() {
<-shutdown
log.Println("shutting down")
}()
var ll net.Listener
if *doTLS {
- tlsCfg := tls.Config{
- GetCertificate: godlighty.GetCertificate,
- NextProtos: []string{"h2", "http/1.1"},
- }
- ll = tls.NewListener(netutil.LimitListener(l, MaxConns), &tlsCfg)
+ tlsCfg := godlighty.NewTLSConfig()
+ ll = tls.NewListener(netutil.LimitListener(l, MaxConns), tlsCfg)
} else {
ll = netutil.LimitListener(l, MaxConns)
}