package main import ( "fmt" "log" "net" "net/http" "os" "git.giftfish.de/ston1th/godrop/v2" ) 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 { log.Fatal(err) } l1, err := godrop.GetListener() if err != nil { log.Fatal("Failed to listen on FD 3:", err) } _, port1, _ := net.SplitHostPort(l1.Addr().String()) l2, err := godrop.GetListenerFd(4) if err != nil { log.Fatal("Failed to listen on FD 4:", err) } _, port2, _ := net.SplitHostPort(l2.Addr().String()) fmt.Printf("port1 %s\nport2 %s\npid %d\nuid %d\ngid %d\n", port1, port2, os.Getpid(), os.Getuid(), os.Getgid()) 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()) })) }