From e970f679d3bb027e8b4b25a18b41efe52bc3f464 Mon Sep 17 00:00:00 2001 From: dev Date: Tue, 18 Jan 2022 06:46:16 +0000 Subject: [PATCH] Add workaround for when removing the socket file is not possible git-svn-id: https://svn.yakumo.dev/yakumo.izuru/marisa/trunk@59 d6811dac-2434-b64a-9ddc-f563ab233461 --- partage.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/partage.go b/partage.go index 308845e..eec99b1 100644 --- a/partage.go +++ b/partage.go @@ -327,25 +327,33 @@ func main() { } if conf.listen[0] == '/' { - listener, err = net.Listen("unix", conf.listen) - if err != nil { + /* Remove any stale socket */ + os.Remove(conf.listen) + if listener, err = net.Listen("unix", conf.listen); err != nil { log.Fatal(err) } + defer listener.Close() - /* Ensure unix socket is removed on exit */ + /* + * Ensure unix socket is removed on exit. + * Note: this might not work when dropping privileges… + */ defer os.Remove(conf.listen) sigs := make(chan os.Signal, 1) - signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + signal.Notify(sigs, os.Interrupt, os.Kill, syscall.SIGTERM) go func() { _ = <-sigs - os.Remove(conf.listen) + listener.Close() + if err = os.Remove(conf.listen); err != nil { + log.Fatal(err) + } os.Exit(0) }() } else { - listener, err = net.Listen("tcp", conf.listen) - if err != nil { + if listener, err = net.Listen("tcp", conf.listen); err != nil { log.Fatal(err) } + defer listener.Close() } if conf.user != "" {