aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go26
1 files changed, 25 insertions, 1 deletions
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))
}