Add workaround for when removing the socket file is not possible
git-svn-id: file:///srv/svn/repo/marisa/trunk@59 d6811dac-2434-b64a-9ddc-f563ab233461
This commit is contained in:
22
partage.go
22
partage.go
@@ -327,25 +327,33 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if conf.listen[0] == '/' {
|
if conf.listen[0] == '/' {
|
||||||
listener, err = net.Listen("unix", conf.listen)
|
/* Remove any stale socket */
|
||||||
if err != nil {
|
os.Remove(conf.listen)
|
||||||
|
if listener, err = net.Listen("unix", conf.listen); err != nil {
|
||||||
log.Fatal(err)
|
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)
|
defer os.Remove(conf.listen)
|
||||||
sigs := make(chan os.Signal, 1)
|
sigs := make(chan os.Signal, 1)
|
||||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
signal.Notify(sigs, os.Interrupt, os.Kill, syscall.SIGTERM)
|
||||||
go func() {
|
go func() {
|
||||||
_ = <-sigs
|
_ = <-sigs
|
||||||
os.Remove(conf.listen)
|
listener.Close()
|
||||||
|
if err = os.Remove(conf.listen); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}()
|
}()
|
||||||
} else {
|
} else {
|
||||||
listener, err = net.Listen("tcp", conf.listen)
|
if listener, err = net.Listen("tcp", conf.listen); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
defer listener.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
if conf.user != "" {
|
if conf.user != "" {
|
||||||
|
|||||||
Reference in New Issue
Block a user