@@ -537,29 +537,40 @@ func (a *Agent) getSerfAddr(bind bool) (*net.TCPAddr, error) {
537
537
bindAddr := a .config .Addresses .Serf
538
538
globalBindAddr := a .config .BindAddr
539
539
port := a .config .Ports .Serf
540
- return pickAddress (bind , globalBindAddr , advertAddr , bindAddr , port , "RPC " )
540
+ return pickAddress (bind , globalBindAddr , advertAddr , bindAddr , port , "Serf " )
541
541
}
542
542
543
543
// pickAddress is a shared helper to pick the address to either bind to or
544
544
// advertise.
545
545
func pickAddress (bind bool , globalBindAddr , advertiseAddr , bindAddr string , port int , service string ) (* net.TCPAddr , error ) {
546
- portConverted := strconv .Itoa (port )
547
546
var serverAddr string
548
547
if advertiseAddr != "" && ! bind {
549
548
serverAddr = advertiseAddr
549
+
550
+ // Check if the advertise has a port
551
+ if host , pport , err := net .SplitHostPort (advertiseAddr ); err == nil {
552
+ if parsed , err := strconv .Atoi (pport ); err == nil {
553
+ serverAddr = host
554
+ port = parsed
555
+ }
556
+ }
550
557
} else if bindAddr != "" && ! (bindAddr == "0.0.0.0" && ! bind ) {
551
- serverAddr = net . JoinHostPort ( bindAddr , portConverted )
558
+ serverAddr = bindAddr
552
559
} else if globalBindAddr != "" && ! (globalBindAddr == "0.0.0.0" && ! bind ) {
553
- serverAddr = net . JoinHostPort ( globalBindAddr , portConverted )
560
+ serverAddr = globalBindAddr
554
561
} else {
555
- serverAddr = net . JoinHostPort ( "127.0.0.1" , portConverted )
562
+ serverAddr = "127.0.0.1"
556
563
}
557
564
558
- addr , err := net .ResolveTCPAddr ( "tcp" , serverAddr )
559
- if err ! = nil {
560
- return nil , fmt .Errorf ("error resolving %s addr %+q : %v " , service , serverAddr , err )
565
+ ip := net .ParseIP ( serverAddr )
566
+ if ip = = nil {
567
+ return nil , fmt .Errorf ("Failed to parse %s address : %q " , service , serverAddr )
561
568
}
562
- return addr , nil
569
+
570
+ return & net.TCPAddr {
571
+ IP : ip ,
572
+ Port : port ,
573
+ }, nil
563
574
}
564
575
565
576
// reservePortsForClient reserves a range of ports for the client to use when
0 commit comments