Now supports socket activation

This commit is contained in:
2022-08-06 19:54:37 +02:00
parent 01c80e1f83
commit 7d12859ef7
7 changed files with 239 additions and 28 deletions

View File

@@ -3,10 +3,11 @@ package main
import (
"flag"
"fmt"
"github.com/coreos/go-systemd/activation"
"github.com/gin-gonic/gin"
"github.com/thequux/qddns/common"
"github.com/thequux/qddns/db"
_ "go.uber.org/zap"
"github.com/thequux/qddns/multilistener"
"net"
"net/http"
"os"
@@ -96,7 +97,16 @@ func main() {
r.POST("/update/:domain", Update)
var err error
if _, err = net.ResolveTCPAddr("tcp", *listen); err == nil {
if listeners, err := activation.Listeners(); err == nil && len(listeners) > 0 {
// Socket activation
var listener net.Listener
if len(listeners) > 1 {
listener, _ = multilistener.New(listeners...)
} else {
listener = listeners[0]
}
err = r.RunListener(listener)
} else if _, err = net.ResolveTCPAddr("tcp", *listen); err == nil {
err = r.Run(*listen)
} else {
// Probably a UNIX address