diff --git a/etcdmain/etcd.go b/etcdmain/etcd.go index 9be2cd2bb..ab6ea8500 100644 --- a/etcdmain/etcd.go +++ b/etcdmain/etcd.go @@ -319,13 +319,13 @@ func startEtcd() (<-chan struct{}, error) { // Start the peer server in a goroutine for _, l := range plns { go func(l net.Listener) { - log.Fatal(http.Serve(l, ph)) + log.Fatal(serveHTTP(l, ph)) }(l) } // Start a client server goroutine for each listen address for _, l := range clns { go func(l net.Listener) { - log.Fatal(http.Serve(l, ch)) + log.Fatal(serveHTTP(l, ch)) }(l) } return s.StopNotify(), nil diff --git a/etcdmain/http.go b/etcdmain/http.go new file mode 100644 index 000000000..23a252936 --- /dev/null +++ b/etcdmain/http.go @@ -0,0 +1,21 @@ +package etcdmain + +import ( + "io/ioutil" + "log" + "net" + "net/http" +) + +// serveHTTP accepts incoming HTTP connections on the listener l, +// creating a new service goroutine for each. The service goroutines +// read requests and then call handler to reply to them. +func serveHTTP(l net.Listener, handler http.Handler) error { + logger := log.New(ioutil.Discard, "etcdhttp", 0) + // TODO: add debug flag; enable logging when debug flag is set + srv := &http.Server{ + Handler: handler, + ErrorLog: logger, // do not log user error + } + return srv.Serve(l) +}