From 90a28fbf9f2c000faea8b33e44c038aa2c718f96 Mon Sep 17 00:00:00 2001 From: emersion Date: Mon, 11 Mar 2019 19:47:33 +0100 Subject: [PATCH] cmd/dkim-milter: close listener on shutdown Fixes https://github.com/emersion/go-dkim/issues/12 --- cmd/dkim-milter/main.go | 19 +++++++++++++++---- go.mod | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/cmd/dkim-milter/main.go b/cmd/dkim-milter/main.go index 53dcb72..3b3546f 100644 --- a/cmd/dkim-milter/main.go +++ b/cmd/dkim-milter/main.go @@ -8,6 +8,7 @@ import ( "net" "net/textproto" "os" + "os/signal" "strings" "github.com/emersion/go-dkim" @@ -160,7 +161,7 @@ func main() { var err error identity, err = os.Hostname() if err != nil { - log.Fatal("Failed to read hostname:", err) + log.Fatal("Failed to read hostname: ", err) } } @@ -180,11 +181,21 @@ func main() { ln, err := net.Listen(listenNetwork, listenAddr) if err != nil { - log.Fatal("Failed to setup listener:", err) + log.Fatal("Failed to setup listener: ", err) } + // Closing the listener will unlink the unix socket, if any + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, os.Interrupt, os.Kill) + go func() { + <-sigs + if err := s.Close(); err != nil { + log.Fatal("Failed to close server: ", err) + } + }() + log.Println("Milter listening at", listenURI) - if err := s.Serve(ln); err != nil { - log.Fatal("Failed to serve:", err) + if err := s.Serve(ln); err != nil && err != milter.ErrServerClosed { + log.Fatal("Failed to serve: ", err) } } diff --git a/go.mod b/go.mod index 76ea82c..eaf4c63 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,6 @@ module github.com/emersion/go-dkim go 1.12 require ( - github.com/emersion/go-milter v0.0.0-20190307185503-a9e6c51fc5dc + github.com/emersion/go-milter v0.0.0-20190311184326-c3095a41a6fe github.com/emersion/go-msgauth v0.0.0-20190307192406-8646172ce7a5 )