fixed serve blocking spawning more listener

This commit is contained in:
2021-10-05 18:12:04 +02:00
parent a692a3417f
commit 835801c0c6

31
main.go
View File

@@ -20,8 +20,10 @@ import (
"net" "net"
"net/http" "net/http"
"os" "os"
"os/signal"
"strconv" "strconv"
"sync" "sync"
"syscall"
"time" "time"
) )
@@ -353,6 +355,9 @@ func getMatch(w http.ResponseWriter, r *http.Request) {
/match/parse/<sharecode> GET parses sharecode provided /match/parse/<sharecode> GET parses sharecode provided
*/ */
func main() { func main() {
killSignals := make(chan os.Signal, 1)
signal.Notify(killSignals, syscall.SIGINT, syscall.SIGTERM)
flag.Parse() flag.Parse()
confStr, err := os.ReadFile("config.yaml") confStr, err := os.ReadFile("config.yaml")
@@ -369,7 +374,7 @@ func main() {
Lock: new(sync.RWMutex), Lock: new(sync.RWMutex),
} }
db.Client, err = ent.Open("sqlite3", "file:opencsgo.db?_fk=1&cache=shared") db.Client, err = ent.Open("sqlite3", "file:csgowtfd.db?_fk=1&cache=shared")
if err != nil { if err != nil {
log.Panicf("Failed to open database %s: %v", "opencsgo.db", err) log.Panicf("Failed to open database %s: %v", "opencsgo.db", err)
} }
@@ -407,21 +412,35 @@ func main() {
router.HandleFunc("/match/{id:[0-9]{19}}", getMatch).Methods("GET") router.HandleFunc("/match/{id:[0-9]{19}}", getMatch).Methods("GET")
loggedRouter := handlers.LoggingHandler(os.Stdout, router) loggedRouter := handlers.LoggingHandler(os.Stdout, router)
sockets := make([]net.Listener, 0)
for _, l := range conf.Httpd.Listen { for _, l := range conf.Httpd.Listen {
if l.Socket != "" { if l.Socket != "" {
sL, err := net.Listen("unix", l.Socket) sL, err := net.Listen("unix", l.Socket)
if err != nil { if err != nil {
log.Fatalf("Failure listing on socket %s: %v", l.Socket, err) log.Fatalf("Failure listing on socket %s: %v", l.Socket, err)
} }
err = http.Serve(sL, loggedRouter) sockets = append(sockets, sL)
if err != nil { go func() {
log.Fatalf("Failure serving on socket %s: %v", l.Socket, err) _ = http.Serve(sL, loggedRouter)
} }()
} else { } else {
err = http.ListenAndServe(fmt.Sprintf("%s:%d", l.Host, l.Port), loggedRouter) tL, err := net.Listen("tcp", fmt.Sprintf("%s:%d", l.Host, l.Port))
if err != nil { if err != nil {
log.Fatalf("Failure listing on %s:%d: %v", l.Host, l.Port, err) log.Fatalf("Failure listing on %s:%d: %v", l.Host, l.Port, err)
} }
go func() {
err = http.Serve(tL, loggedRouter)
if err != nil {
log.Fatalf("Failure serving on %s:%d: %v", l.Host, l.Port, err)
}
}()
} }
} }
<-killSignals
for _, s := range sockets {
_ = s.Close()
}
} }