From fa267ded97fbac488f019f3bf7c3c772bb1785de Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Tue, 18 Feb 2025 09:16:56 +0800 Subject: [PATCH] main.go: Remove stale UNIX domain sockets --- main.go | 39 +++++++++++++++++++++++++++++++++++---- diff --git a/main.go b/main.go index b4e511dbff606373f92146171f6112f523b17d69..9f1606bcc47494b62f28da8590a085df30ca4527 100644 --- a/main.go +++ b/main.go @@ -1,9 +1,11 @@ package main import ( + "errors" "flag" "net" "net/http" + "syscall" "go.lindenii.runxiyu.org/lindenii-common/clog" ) @@ -27,8 +29,19 @@ clog.Fatal(1, "Loading templates: "+err.Error()) } // 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 @@ }() // 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 @@ }() // 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) -- 2.48.1