Cleanup Socket and Pidfile on exit

These were previously left intact, even when exiting gracefully. As the
daemon also fails if the socket already exists, it became the caller's
responsibilityto check for and cleanup old socket files when performing
graceful / deliberate restarts.

Signed-off-by: Emily Shepherd <emily@redcoat.dev>
This commit is contained in:
Emily Shepherd 2022-09-06 01:24:17 +01:00
parent 8c3664b2b1
commit f89a005740
No known key found for this signature in database
GPG Key ID: E4BE06C43A997EC4

View File

@ -15,6 +15,7 @@
package main
import (
"context"
"encoding/json"
"errors"
"fmt"
@ -23,9 +24,11 @@ import (
"net/http"
"net/rpc"
"os"
"os/signal"
"path/filepath"
"runtime"
"sync"
"syscall"
"time"
"github.com/containernetworking/cni/pkg/skel"
@ -195,11 +198,27 @@ func runDaemon(
return fmt.Errorf("Error getting listener: %v", err)
}
srv := http.Server{}
exit := make(chan os.Signal, 1)
done := make(chan bool, 1)
signal.Notify(exit, os.Interrupt, syscall.SIGTERM)
go func() {
<-exit
srv.Shutdown(context.TODO())
os.Remove(hostPrefix + socketPath)
os.Remove(pidfilePath)
done <- true
}()
dhcp := newDHCP(dhcpClientTimeout, resendMax)
dhcp.hostNetnsPrefix = hostPrefix
dhcp.broadcast = broadcast
rpc.Register(dhcp)
rpc.HandleHTTP()
http.Serve(l, nil)
srv.Serve(l)
<-done
return nil
}