From 05d6841d7b33f6ffe02b0d77afaa7c44687cea9e Mon Sep 17 00:00:00 2001 From: Gibheer Date: Wed, 30 Oct 2024 16:31:20 +0100 Subject: add interrupt handler and unix socket listener --- main.go | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index a2decee..5049fe2 100644 --- a/main.go +++ b/main.go @@ -3,8 +3,11 @@ package main import ( "flag" "log" + "net" "net/http" "net/http/cgi" + "os" + "os/signal" "strings" ) @@ -13,8 +16,29 @@ func main() { dir := flag.String("dir", "", "set a different working directory from the base path of 'path'") env := flag.String("env", "", "set environment variables for the CGI process") prefix := flag.String("uri-prefix", "/", "set the URL prefix when the CGI process is hosted in a sub directory") + addr := flag.String("listen", "127.0.0.1:8080", "set the listen address") flag.Parse() + listenAddr := *addr + listenType := "unix" + switch listenAddr[0] { + case ':', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + listenType = "tcp" + } + if listenType == "unix" { + c := make(chan os.Signal, 1) + signal.Notify(c, os.Interrupt) + go func() { + <-c + os.Remove(listenAddr) + os.Exit(0) + }() + } + l, err := net.Listen(listenType, listenAddr) + if err != nil { + log.Fatalf("could not start to listen: %s", err) + } + forwarder := &cgi.Handler{ Path: *path, Root: *prefix, @@ -22,5 +46,5 @@ func main() { Dir: *dir, } http.Handle("/", forwarder) - log.Fatalf("server stopped working: %s", http.ListenAndServe(":8080", nil)) + log.Printf("server stopped working: %s", http.Serve(l, nil)) } -- cgit v1.2.3-70-g09d2