Ver Fonte

clean HTTP sockets on shutdown

boyska há 5 anos atrás
pai
commit
c70e28ff27
1 ficheiros alterados com 8 adições e 3 exclusões
  1. 8 3
      cmd/circologd/main.go

+ 8 - 3
cmd/circologd/main.go

@@ -58,6 +58,7 @@ func main() {
 	go hub.Run()
 
 	setupHTTP(hub)
+	httpServer := http.Server{Handler: nil}
 	if *querySocket != "" {
 		fmt.Printf("Binding address `%s` [http]\n", *querySocket)
 		unixListener, err := net.Listen("unix", *querySocket)
@@ -65,16 +66,17 @@ func main() {
 			fmt.Fprintln(os.Stderr, "Error binding HTTP unix domain socket", err)
 			return
 		}
+		defer cleanSocket(*querySocket)
 		go func() {
-			err := http.Serve(unixListener, nil)
-			if err != nil {
+			if err := httpServer.Serve(unixListener); err != nil {
 				fmt.Fprintln(os.Stderr, "error binding:", err)
 			}
 		}()
 	} else {
+		httpServer.Addr = *queryAddr
 		fmt.Printf("Binding address `%s` [http]\n", *queryAddr)
 		go func() {
-			err := http.ListenAndServe(*queryAddr, nil)
+			err := httpServer.ListenAndServe()
 			if err != nil {
 				fmt.Fprintln(os.Stderr, "error binding:", err)
 			}
@@ -85,6 +87,9 @@ func main() {
 		select {
 		case <-interrupt:
 			server.Kill()
+			if err := httpServer.Close(); err != nil {
+				fmt.Fprintln(os.Stderr, "Error closing http server:", err)
+			}
 			return
 		default:
 		}