fixed serve blocking spawning more listener
This commit is contained in:
31
main.go
31
main.go
@@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user