Miki Tebeka committed 977817d

die with varargs, handle HTTP errors

Comments (0)

Files changed (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)
 // 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 handler /switch and switches backend
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.