diff options
| author | Shulhan <m.shulhan@gmail.com> | 2026-02-02 22:16:33 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2026-04-15 01:18:20 +0700 |
| commit | 66b80ad993cd46f3897d16409114aa3a705c021e (patch) | |
| tree | 9f514711b99bcfb592b810ed9d162d4c1f25c9ae | |
| parent | 9894ad6024a615fe9a3aa67f0e227ea93a4e4f29 (diff) | |
| download | go-x-website-main.tar.xz | |
Change-Id: I12e667f1945eb9440147842c3374756dbd8b09ef
| -rw-r--r-- | cmd/golangorg/server.go | 34 | ||||
| -rw-r--r-- | go.mod | 1 | ||||
| -rw-r--r-- | go.sum | 2 |
3 files changed, 33 insertions, 4 deletions
diff --git a/cmd/golangorg/server.go b/cmd/golangorg/server.go index 7eb2b628..da033e95 100644 --- a/cmd/golangorg/server.go +++ b/cmd/golangorg/server.go @@ -18,6 +18,7 @@ import ( "io" "io/fs" "log" + "net" "net/http" "net/url" "os" @@ -32,6 +33,7 @@ import ( "time" "cloud.google.com/go/datastore" + "git.sr.ht/~shulhan/pakakeh.go/lib/systemd" "golang.org/x/build/relnote" "golang.org/x/build/repos" "golang.org/x/website" @@ -129,10 +131,34 @@ func main() { handler = loggingHandler(handler) } - // Start http server. - fmt.Fprintf(os.Stderr, "serving http://%s\n", *httpAddr) - if err := http.ListenAndServe(*httpAddr, handler); err != nil { - log.Fatalf("ListenAndServe %s: %v", *httpAddr, err) + 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.Fatal(`invalid Listener address, got %s, want %s`, + gotAddr, *httpAddr) + } + } + + if listener == nil { + // Start http server. + fmt.Fprintf(os.Stderr, "serving http://%s\n", *httpAddr) + if err := http.ListenAndServe(*httpAddr, handler); err != nil { + log.Fatalf("ListenAndServe %s: %v", *httpAddr, err) + } + } else { + fmt.Fprintf(os.Stderr, "serving using Listener at %s\n", *httpAddr) + if err := http.Serve(listener, handler); err != nil { + log.Fatalf("Serve %s: %v", *httpAddr, err) + } } } @@ -6,6 +6,7 @@ require ( cloud.google.com/go/cloudbuild v1.14.0 cloud.google.com/go/datastore v1.13.0 cloud.google.com/go/storage v1.31.0 + git.sr.ht/~shulhan/pakakeh.go v0.60.3-0.20260202092811-1e3bb9be8444 github.com/chromedp/cdproto v0.0.0-20241022234722-4d5d5faf59fb github.com/chromedp/chromedp v0.11.1 github.com/evanw/esbuild v0.18.19 @@ -14,6 +14,8 @@ cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tE cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= +git.sr.ht/~shulhan/pakakeh.go v0.60.3-0.20260202092811-1e3bb9be8444 h1:mqX+Z2dyfChpFOgt6gV9R5AT3oQN3pw4gMbPQLGm1DI= +git.sr.ht/~shulhan/pakakeh.go v0.60.3-0.20260202092811-1e3bb9be8444/go.mod h1:1MkKXbLZRHTcnheeSEbRpGztkym4Yxzh90ep+jCxbDc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/alexflint/go-arg v1.3.0/go.mod h1:9iRbDxne7LcR/GSvEr7ma++GLpdIU1zrghf2y2768kM= github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw= |
