aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'server.go')
-rw-r--r--server.go19
1 files changed, 10 insertions, 9 deletions
diff --git a/server.go b/server.go
index 49bccb5..34d8070 100644
--- a/server.go
+++ b/server.go
@@ -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
}