From 91c1822473923049755782fcb6d0e101556f4a16 Mon Sep 17 00:00:00 2001 From: Mathias Hall-Andersen Date: Tue, 1 Aug 2017 12:45:11 +0200 Subject: [PATCH] Remove stale unix socket --- src/uapi_linux.go | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/uapi_linux.go b/src/uapi_linux.go index 1055dca..17c5a9d 100644 --- a/src/uapi_linux.go +++ b/src/uapi_linux.go @@ -1,6 +1,7 @@ package main import ( + "errors" "fmt" "golang.org/x/sys/unix" "net" @@ -48,12 +49,38 @@ func (l *UAPIListener) Addr() net.Addr { return nil } +func connectUnixSocket(path string) (net.Listener, error) { + + // attempt inital connection + + listener, err := net.Listen("unix", path) + if err == nil { + return listener, nil + } + + // check if active + + _, err = net.Dial("unix", path) + if err == nil { + return nil, errors.New("Unix socket in use") + } + + // attempt cleanup + + err = os.Remove(path) + if err != nil { + return nil, err + } + + return net.Listen("unix", path) +} + func NewUAPIListener(name string) (net.Listener, error) { // open UNIX socket socketPath := fmt.Sprintf("/var/run/wireguard/%s.sock", name) - listener, err := net.Listen("unix", socketPath) + listener, err := connectUnixSocket(socketPath) if err != nil { return nil, err }