Skip to content

Commit 1c90d80

Browse files
committed
Check for systemd socket activation
1 parent 729c6d4 commit 1c90d80

1 file changed

Lines changed: 21 additions & 3 deletions

File tree

backend/web/run.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import (
44
"context"
55
"errors"
66
"log/slog"
7+
"net"
78
"net/http"
89
"time"
10+
11+
"github.com/coreos/go-systemd/v22/activation"
912
)
1013

1114
func Run(ctx context.Context, handler http.Handler, addr string) error {
1215
srv := http.Server{
13-
Addr: addr,
1416
Handler: handler,
1517
}
1618

@@ -35,11 +37,27 @@ func Run(ctx context.Context, handler http.Handler, addr string) error {
3537
close(stopError)
3638
}()
3739

38-
slog.Info("starting web server", "addr", srv.Addr)
40+
systemdSocketListeners, err := activation.Listeners()
41+
if err != nil {
42+
return err
43+
}
44+
45+
var listener net.Listener
46+
if len(systemdSocketListeners) > 0 {
47+
slog.Info("using systemd socket activation")
48+
listener = systemdSocketListeners[0]
49+
} else {
50+
listener, err = net.Listen("tcp", addr)
51+
if err != nil {
52+
return err
53+
}
54+
}
55+
56+
slog.Info("starting web server", "addr", listener.Addr().String())
3957

4058
// listen and serve forever
4159
// ignore http.ErrServerClosed (expected upon stop)
42-
err := srv.ListenAndServe()
60+
err = srv.Serve(listener)
4361
if err != nil && !errors.Is(err, http.ErrServerClosed) {
4462
return err
4563
}

0 commit comments

Comments
 (0)