Browse Source

etcd: manually construct listeners

Brian Waldon 11 years ago
parent
commit
a782a1a7d1
2 changed files with 28 additions and 3 deletions
  1. 19 3
      main.go
  2. 9 0
      transport/listener.go

+ 19 - 3
main.go

@@ -19,6 +19,7 @@ import (
 	"github.com/coreos/etcd/raft"
 	"github.com/coreos/etcd/raft"
 	"github.com/coreos/etcd/snap"
 	"github.com/coreos/etcd/snap"
 	"github.com/coreos/etcd/store"
 	"github.com/coreos/etcd/store"
+	"github.com/coreos/etcd/transport"
 	"github.com/coreos/etcd/wal"
 	"github.com/coreos/etcd/wal"
 )
 )
 
 
@@ -167,18 +168,28 @@ func startEtcd() {
 		Info:    cors,
 		Info:    cors,
 	}
 	}
 
 
+	l, err := transport.NewListener(*paddr)
+	if err != nil {
+		log.Fatal(err)
+	}
+
 	// Start the peer server in a goroutine
 	// Start the peer server in a goroutine
 	go func() {
 	go func() {
 		log.Print("Listening for peers on ", *paddr)
 		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
 	// Start a client server goroutine for each listen address
 	for _, addr := range *addrs {
 	for _, addr := range *addrs {
 		addr := addr
 		addr := addr
+		l, err := transport.NewListener(addr)
+		if err != nil {
+			log.Fatal(err)
+		}
+
 		go func() {
 		go func() {
 			log.Print("Listening for client requests on ", addr)
 			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
 	// Start a proxy server goroutine for each listen address
 	for _, addr := range *addrs {
 	for _, addr := range *addrs {
 		addr := addr
 		addr := addr
+		l, err := transport.NewListener(addr)
+		if err != nil {
+			log.Fatal(err)
+		}
+
 		go func() {
 		go func() {
 			log.Print("Listening for client requests on ", addr)
 			log.Print("Listening for client requests on ", addr)
-			log.Fatal(http.ListenAndServe(addr, ph))
+			log.Fatal(http.Serve(l, ph))
 		}()
 		}()
 	}
 	}
 }
 }

+ 9 - 0
transport/listener.go

@@ -0,0 +1,9 @@
+package transport
+
+import (
+	"net"
+)
+
+func NewListener(addr string) (net.Listener, error) {
+	return net.Listen("tcp", addr)
+}