diff options
Diffstat (limited to 'server.go')
-rw-r--r-- | server.go | 19 |
1 files changed, 10 insertions, 9 deletions
@@ -4,6 +4,7 @@ import ( "bufio" "crypto/tls" "fmt" + "github.com/coreos/go-systemd/v22/activation" "io" "net" "strings" @@ -23,15 +24,18 @@ type Handler interface { // new connections to the given handler. // Each request is handled in a separate goroutine. func ListenAndServe(addr, certFile, keyFile string, handler Handler) error { - if addr == "" { - addr = "127.0.0.1:1965" + listeners, err := activation.Listeners() + if err != nil { + return err + } + if len(listeners) != 1 { + return err } - listener, err := listen(addr, certFile, keyFile) + listener, err := listen(listeners[0], certFile, keyFile) if err != nil { return err } - err = serve(listener, handler) if err != nil { return err @@ -45,17 +49,14 @@ func ListenAndServe(addr, certFile, keyFile string, handler Handler) error { return nil } -func listen(addr, certFile, keyFile string) (net.Listener, error) { +func listen(listener net.Listener, certFile, keyFile string) (net.Listener, error) { cer, err := tls.LoadX509KeyPair(certFile, keyFile) if err != nil { return nil, fmt.Errorf("failed to load certificates: %v", err) } config := &tls.Config{Certificates: []tls.Certificate{cer}} - ln, err := tls.Listen("tcp", addr, config) - if err != nil { - return nil, fmt.Errorf("failed to listen: %v", err) - } + ln := tls.NewListener(listener, config) return ln, nil } |