diff --git a/main.go b/main.go index c59b40f7b..5e2f6070e 100644 --- a/main.go +++ b/main.go @@ -19,6 +19,7 @@ import ( "github.com/coreos/etcd/raft" "github.com/coreos/etcd/snap" "github.com/coreos/etcd/store" + "github.com/coreos/etcd/transport" "github.com/coreos/etcd/wal" ) @@ -167,18 +168,28 @@ func startEtcd() { Info: cors, } + l, err := transport.NewListener(*paddr) + if err != nil { + log.Fatal(err) + } + // Start the peer server in a goroutine go func() { log.Print("Listening for peers on ", *paddr) - log.Fatal(http.ListenAndServe(*paddr, ph)) + log.Fatal(http.Serve(l, ph)) }() // Start a client server goroutine for each listen address for _, addr := range *addrs { addr := addr + l, err := transport.NewListener(addr) + if err != nil { + log.Fatal(err) + } + go func() { log.Print("Listening for client requests on ", addr) - log.Fatal(http.ListenAndServe(addr, ch)) + log.Fatal(http.Serve(l, ch)) }() } } @@ -201,9 +212,14 @@ func startProxy() { // Start a proxy server goroutine for each listen address for _, addr := range *addrs { addr := addr + l, err := transport.NewListener(addr) + if err != nil { + log.Fatal(err) + } + go func() { log.Print("Listening for client requests on ", addr) - log.Fatal(http.ListenAndServe(addr, ph)) + log.Fatal(http.Serve(l, ph)) }() } } diff --git a/transport/listener.go b/transport/listener.go new file mode 100644 index 000000000..d73e22d5c --- /dev/null +++ b/transport/listener.go @@ -0,0 +1,9 @@ +package transport + +import ( + "net" +) + +func NewListener(addr string) (net.Listener, error) { + return net.Listen("tcp", addr) +}