From: Mathias Hall-Andersen Date: Tue, 1 Aug 2017 10:45:11 +0000 (+0200) Subject: Remove stale unix socket X-Git-Tag: 0.0.20180514~128 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=91c1822473923049755782fcb6d0e101556f4a16;p=thirdparty%2Fwireguard-go.git Remove stale unix socket --- 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 }