diff options
| author | Alexander Hunt <me@liz.coffee> | 2026-06-21 17:11:32 -0700 |
|---|---|---|
| committer | Alexander Hunt <me@liz.coffee> | 2026-06-21 17:11:32 -0700 |
| commit | 6f3ba344c1f8413a463dc6274f24ef00bf47e534 (patch) | |
| tree | 2e260c52f1ecf89ece4fad131a91cde7b3500921 /main.go | |
| parent | df7b13a248853880e50743757caedcfbc2b7eb6d (diff) | |
| download | penguins.lan-main.tar.gz penguins.lan-main.zip | |
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 41 |
1 files changed, 35 insertions, 6 deletions
@@ -2,6 +2,8 @@ package main import ( "log" + "net" + "os" "github.com/joho/godotenv" @@ -41,12 +43,22 @@ func main() { if argv.Server { server := api.MakeServer(argv, dbConn) - log.Printf("listening on :%d", argv.Port) - go func() { - if err := server.ListenAndServe(); err != nil { - log.Fatal(err) - } - }() + if argv.Socket != "" { + listener := unixListener(argv.Socket) + log.Printf("listening on unix socket %s", argv.Socket) + go func() { + if err := server.Serve(listener); err != nil { + log.Fatal(err) + } + }() + } else { + log.Printf("listening on :%d", argv.Port) + go func() { + if err := server.ListenAndServe(); err != nil { + log.Fatal(err) + } + }() + } } if argv.Dns { @@ -63,3 +75,20 @@ func main() { select {} } } + +// unixListener binds an HTTP unix socket, clearing any stale socket left by a +// previous run and relaxing perms to 0660 so a same-group reverse proxy can +// reach it. +func unixListener(path string) net.Listener { + if err := os.Remove(path); err != nil && !os.IsNotExist(err) { + log.Fatalf("could not clear stale socket %s: %v", path, err) + } + listener, err := net.Listen("unix", path) + if err != nil { + log.Fatal(err) + } + if err := os.Chmod(path, 0o660); err != nil { + log.Fatalf("could not chmod socket %s: %v", path, err) + } + return listener +} |
