From 2f56b620fe3267c6fac10f6d5e4a7e857d5e71e7 Mon Sep 17 00:00:00 2001 From: Shulhan Date: Mon, 2 Feb 2026 21:57:47 +0700 Subject: local: add support for socket based activation with systemd The tour program now can be activated by systemd.socket(5). --- local.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'local.go') diff --git a/local.go b/local.go index f29a822..73cf2d5 100644 --- a/local.go +++ b/local.go @@ -22,6 +22,7 @@ import ( "strings" "time" + "git.sr.ht/~shulhan/pakakeh.go/lib/systemd" "golang.org/x/tools/playground/socket" // Imports so that go build/install automatically installs them. @@ -155,7 +156,29 @@ func main() { log.Printf("Please open your web browser and visit %s", url) } }() - log.Fatal(http.ListenAndServe(httpAddr, nil)) + + listeners, err := systemd.Listeners(true) + if err != nil { + log.Fatal(err) + } + if len(listeners) > 1 { + log.Fatal(`too many listeners received for activation`) + } + var listener net.Listener + if len(listeners) == 1 { + listener = listeners[0] + gotAddr := listener.Addr().String() + if gotAddr != httpAddr { + log.Fatalf(`invalid Listener address, got %s, want %s`, + gotAddr, httpAddr) + } + } + if listener != nil { + err = http.Serve(listener, nil) + } else { + err = http.ListenAndServe(httpAddr, nil) + } + log.Fatal(err) } // registerStatic registers handlers to serve static content -- cgit v1.3