diff options
-rw-r--r-- | main.go | 39 |
1 files changed, 35 insertions, 4 deletions
@@ -1,9 +1,11 @@ package main import ( + "errors" "flag" "net" "net/http" + "syscall" "go.lindenii.runxiyu.org/lindenii-common/clog" ) @@ -27,8 +29,19 @@ func main() { } // UNIX socket listener for hooks - hooks_listener, err := net.Listen("unix", config.Hooks.Socket) - if err != nil { + var hooks_listener net.Listener + var err error + hooks_listener, err = net.Listen("unix", config.Hooks.Socket) + if errors.Is(err, syscall.EADDRINUSE) { + clog.Warn("Removing stale socket " + config.Hooks.Socket) + if err := syscall.Unlink(config.Hooks.Socket); err != nil { + clog.Fatal(1, "Removing stale socket: "+err.Error()) + } + hooks_listener, err = net.Listen("unix", config.Hooks.Socket) + if err != nil { + clog.Fatal(1, "Listening hooks: "+err.Error()) + } + } else if err != nil { clog.Fatal(1, "Listening hooks: "+err.Error()) } clog.Info("Listening hooks on unix " + config.Hooks.Socket) @@ -40,7 +53,16 @@ func main() { // SSH listener ssh_listener, err := net.Listen(config.SSH.Net, config.SSH.Addr) - if err != nil { + if errors.Is(err, syscall.EADDRINUSE) && config.SSH.Net == "unix" { + clog.Warn("Removing stale socket " + config.SSH.Addr) + if err := syscall.Unlink(config.SSH.Addr); err != nil { + clog.Fatal(1, "Removing stale socket: "+err.Error()) + } + ssh_listener, err = net.Listen(config.SSH.Net, config.SSH.Addr) + if err != nil { + clog.Fatal(1, "Listening SSH: "+err.Error()) + } + } else if err != nil { clog.Fatal(1, "Listening SSH: "+err.Error()) } clog.Info("Listening SSH on " + config.SSH.Net + " " + config.SSH.Addr) @@ -52,7 +74,16 @@ func main() { // HTTP listener http_listener, err := net.Listen(config.HTTP.Net, config.HTTP.Addr) - if err != nil { + if errors.Is(err, syscall.EADDRINUSE) && config.HTTP.Net == "unix" { + clog.Warn("Removing stale socket " + config.HTTP.Addr) + if err := syscall.Unlink(config.HTTP.Addr); err != nil { + clog.Fatal(1, "Removing stale socket: "+err.Error()) + } + http_listener, err = net.Listen(config.HTTP.Net, config.HTTP.Addr) + if err != nil { + clog.Fatal(1, "Listening HTTP: "+err.Error()) + } + } else if err != nil { clog.Fatal(1, "Listening HTTP: "+err.Error()) } clog.Info("Listening HTTP on " + config.HTTP.Net + " " + config.HTTP.Addr) |