]> Sergey Matveev's repositories - btrtrc.git/blob - util/loghttp.go
loghttp: Try successive port numbers until available
[btrtrc.git] / util / loghttp.go
1 package util
2
3 import (
4         "log"
5         "net"
6         "net/http"
7 )
8
9 func LoggedHTTPServe(addr string) {
10         netAddr, err := net.ResolveTCPAddr("tcp", addr)
11         if err != nil {
12                 log.Fatalf("error resolving http addr: %s", err)
13         }
14         var conn net.Listener
15         for try := 0; try < 100; try++ {
16                 conn, err = net.ListenTCP("tcp", netAddr)
17                 if err == nil {
18                         break
19                 }
20                 netAddr.Port++
21         }
22         if err != nil {
23                 log.Fatalf("error creating http conn: %#v", err)
24         }
25         log.Printf("starting http server on http://%s", conn.Addr())
26         go func() {
27                 defer conn.Close()
28                 err = (&http.Server{}).Serve(conn)
29                 if err != nil {
30                         log.Fatalf("error serving http: %s", err)
31                 }
32         }()
33 }