cmd/torrent/main.go | 13 +++++++++++++ diff --git a/cmd/torrent/main.go b/cmd/torrent/main.go index f9067a79905dd1fe2f89e14e0f92f8c7b89a289c..abbb5521fd64a3fc0f331c561c5dbd494699cfcf 100644 --- a/cmd/torrent/main.go +++ b/cmd/torrent/main.go @@ -8,7 +8,9 @@ "log" "net" "net/http" "os" + "os/signal" "strings" + "syscall" "time" "github.com/anacrolix/envpprof" @@ -150,6 +152,15 @@ } return *flags.Stats } +func exitSignalHandlers(client *torrent.Client) { + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + for { + log.Printf("close signal received: %+v", <-c) + client.Close() + } +} + func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) tagflag.Parse(&flags) @@ -183,6 +194,8 @@ if err != nil { log.Fatalf("error creating client: %s", err) } defer client.Close() + go exitSignalHandlers(client) + // Write status on the root path on the default HTTP muxer. This will be // bound to localhost somewhere if GOPPROF is set, thanks to the envpprof // import.