package main import ( "fmt" "net" "net/http" "os" "git.giftfish.de/ston1th/godrop" ) func main() { cfg := godrop.Config{ User: "nobody", Group: "nobody", Foreground: true, } err := godrop.MultiDrop(cfg, func() ([]net.Listener, error) { l1, err := net.Listen("tcp", ":80") if err != nil { return nil, err } l2, err := net.Listen("tcp", ":443") return []net.Listener{l1, l2}, err }) if err != nil { fmt.Println(err) } l1, err := godrop.GetListener() if err != nil { fmt.Println("Failed to listen on FD 3:", err) os.Exit(1) } _, port1, _ := net.SplitHostPort(l1.Addr().String()) l2, err := godrop.GetListenerFd(4) if err != nil { fmt.Println("Failed to listen on FD 4:", err) os.Exit(1) } _, port2, _ := net.SplitHostPort(l2.Addr().String()) go func() { http.Serve(l1, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "port %s\npid %d\nuid %d\ngid %d", port1, os.Getpid(), os.Getuid(), os.Getgid()) })) }() http.Serve(l2, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "port %s\npid %d\nuid %d\ngid %d", port2, os.Getpid(), os.Getuid(), os.Getgid()) })) }