Commits

Miki Tebeka committed d149acb

Update version of seamless

Comments (0)

Files changed (1)

 	"os"
 )
 
+const (
+	Version = "0.1.1"
+)
+
 // Current backend
 var backend string
 
 		flag.PrintDefaults()
 	}
 	port := flag.Int("httpPort", 6777, "http interface port")
+	version := flag.Bool("version", false, "show version and exit")
 	flag.Parse()
+
+	if *version {
+		fmt.Printf("seamless %s\n", Version)
+		os.Exit(0)
+	}
+
 	if flag.NArg() != 2 {
 		flag.Usage()
 		os.Exit(1)
 
 	local, err := net.Listen("tcp", localAddr)
 	if local == nil {
-		die(fmt.Sprintf("cannot listen: %v", err))
+		die("cannot listen: %v", err)
 	}
 
-	go startHttpServer(*port)
+	go func() {
+		if err := startHttpServer(*port); err != nil {
+			die("cannot listen on %d: %v", *port, err)
+		}
+	}()
 
 	for {
 		conn, err := local.Accept()
 		if conn == nil {
-			die(fmt.Sprintf("accept failed: %v", err))
+			die("accept failed: %v", err)
 		}
 		go forward(conn, backend)
 	}
 }
 
 // die prints error message and aborts the program
-func die(msg string) {
+func die(format string, args ...interface{}) {
+	msg := fmt.Sprintf(format, args...)
 	fmt.Fprintf(os.Stderr, "error: %s\n", msg)
 	os.Exit(1)
 }
 
 // startHttpServer start the HTTP server interface in a given port
-func startHttpServer(port int) {
+func startHttpServer(port int) error {
 	http.HandleFunc("/switch", switchHandler)
 	http.HandleFunc("/current", currentHandler)
-	http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
+	return http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
 }
 
-// switchHandler handles /switch and switches backend
+// switchHandler handler /switch and switches backend
 func switchHandler(w http.ResponseWriter, req *http.Request) {
 	newBackend := req.FormValue("backend")
 	if len(newBackend) == 0 {