diff options
| author | Shulhan <m.shulhan@gmail.com> | 2026-02-02 21:57:47 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2026-02-02 21:57:47 +0700 |
| commit | 2f56b620fe3267c6fac10f6d5e4a7e857d5e71e7 (patch) | |
| tree | 07ae491e943ac6a7c0d571576f043eef61683e77 /local.go | |
| parent | af01db92500d1b635bfbf70727a8e7b12ef7fe00 (diff) | |
| download | golang-id-tour-2f56b620fe3267c6fac10f6d5e4a7e857d5e71e7.tar.xz | |
local: add support for socket based activation with systemd
The tour program now can be activated by systemd.socket(5).
Diffstat (limited to 'local.go')
| -rw-r--r-- | local.go | 25 |
1 files changed, 24 insertions, 1 deletions
@@ -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 |
