Remove stale unix socket

This commit is contained in:
Mathias Hall-Andersen 2017-08-01 12:45:11 +02:00
parent b03a6ab1b1
commit 91c1822473

View File

@ -1,6 +1,7 @@
package main package main
import ( import (
"errors"
"fmt" "fmt"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"net" "net"
@ -48,12 +49,38 @@ func (l *UAPIListener) Addr() net.Addr {
return nil 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) { func NewUAPIListener(name string) (net.Listener, error) {
// open UNIX socket // open UNIX socket
socketPath := fmt.Sprintf("/var/run/wireguard/%s.sock", name) socketPath := fmt.Sprintf("/var/run/wireguard/%s.sock", name)
listener, err := net.Listen("unix", socketPath) listener, err := connectUnixSocket(socketPath)
if err != nil { if err != nil {
return nil, err return nil, err
} }