From 6f3ba344c1f8413a463dc6274f24ef00bf47e534 Mon Sep 17 00:00:00 2001 From: Alexander Hunt Date: Sun, 21 Jun 2026 17:11:32 -0700 Subject: Adding option to bind via unix socket --- main.go | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 872749d..9ec1cd9 100644 --- a/main.go +++ b/main.go @@ -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 +} -- cgit v1.3