diff options
author | Runxi Yu <me@runxiyu.org> | 2025-02-18 09:16:56 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-02-18 09:16:56 +0800 |
commit | fa267ded97fbac488f019f3bf7c3c772bb1785de (patch) | |
tree | 5f055a1d13bf6e4abeee04d7a4c89a42b9dfcc4a | |
parent | hooks: Fix the race condition that causes EPIPE (diff) | |
download | forge-fa267ded97fbac488f019f3bf7c3c772bb1785de.tar.gz forge-fa267ded97fbac488f019f3bf7c3c772bb1785de.tar.zst forge-fa267ded97fbac488f019f3bf7c3c772bb1785de.zip |
main.go: Remove stale UNIX domain sockets
-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) |