diff options
| author | Shulhan <m.shulhan@gmail.com> | 2026-02-02 23:00:55 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2026-04-15 01:16:21 +0700 |
| commit | 14d652ebff33bd0e4769f47baba2574adabc494e (patch) | |
| tree | b7a80cb77674fa9e84bbbb3a8e9ae418f34d033b /cmd | |
| parent | 81095845401a2ac64bc5ee43a4f9b013207d3b7e (diff) | |
| download | go-x-pkgsite-14d652ebff33bd0e4769f47baba2574adabc494e.tar.xz | |
[DO-NOT-MERGE] cmd/pkgsite: implement socket based activation
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/pkgsite/main.go | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/cmd/pkgsite/main.go b/cmd/pkgsite/main.go index 49b99a59..eae690e0 100644 --- a/cmd/pkgsite/main.go +++ b/cmd/pkgsite/main.go @@ -60,6 +60,7 @@ import ( "strings" "time" + "git.sr.ht/~shulhan/pakakeh.go/lib/systemd" "golang.org/x/pkgsite/cmd/internal/pkgsite" "golang.org/x/pkgsite/internal/browser" "golang.org/x/pkgsite/internal/log" @@ -133,10 +134,27 @@ func main() { addr = ":http" } - ln, err := net.Listen("tcp", addr) + var ln net.Listener + listeners, err := systemd.Listeners(true) if err != nil { dief("%s", err) } + if len(listeners) > 1 { + dief(`too many listeners received for activation`) + } + if len(listeners) == 1 { + ln = listeners[0] + gotAddr := ln.Addr().String() + if gotAddr != addr { + dief(`invalid Listener address, got %s, want %s`, + gotAddr, addr) + } + } else { + ln, err = net.Listen("tcp", addr) + if err != nil { + dief("%s", err) + } + } url := "http://" + addr log.Infof(ctx, "Listening on addr %s", url) |
