Browse Source

embed: connect json gateway with user-provided listen address

net.Listener says its address is [::] when given 0.0.0.0, breaking
hosts that have ipv6 disabled.

Fixes #8151
Fixes #7961
Anthony Romano 8 years ago
parent
commit
63350f5ac1
2 changed files with 5 additions and 1 deletions
  1. 3 0
      embed/etcd.go
  2. 2 1
      embed/serve.go

+ 3 - 0
embed/etcd.go

@@ -328,6 +328,9 @@ func startClientListeners(cfg *Config) (sctxs map[string]*serveCtx, err error) {
 		if sctx.l, err = net.Listen(proto, addr); err != nil {
 		if sctx.l, err = net.Listen(proto, addr); err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
+		// net.Listener will rewrite ipv4 0.0.0.0 to ipv6 [::], breaking
+		// hosts that disable ipv6. So, use the address given by the user.
+		sctx.addr = addr
 
 
 		if fdLimit, fderr := runtimeutil.FDLimit(); fderr == nil {
 		if fdLimit, fderr := runtimeutil.FDLimit(); fderr == nil {
 			if fdLimit <= reservedInternalFDNum {
 			if fdLimit <= reservedInternalFDNum {

+ 2 - 1
embed/serve.go

@@ -44,6 +44,7 @@ import (
 
 
 type serveCtx struct {
 type serveCtx struct {
 	l        net.Listener
 	l        net.Listener
+	addr     string
 	secure   bool
 	secure   bool
 	insecure bool
 	insecure bool
 
 
@@ -171,7 +172,7 @@ type registerHandlerFunc func(context.Context, *gw.ServeMux, *grpc.ClientConn) e
 
 
 func (sctx *serveCtx) registerGateway(opts []grpc.DialOption) (*gw.ServeMux, error) {
 func (sctx *serveCtx) registerGateway(opts []grpc.DialOption) (*gw.ServeMux, error) {
 	ctx := sctx.ctx
 	ctx := sctx.ctx
-	conn, err := grpc.DialContext(ctx, sctx.l.Addr().String(), opts...)
+	conn, err := grpc.DialContext(ctx, sctx.addr, opts...)
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err
 	}
 	}