github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgNet/kmgProxy/ParseUnsolvedAddr.go (about)

     1  package kmgProxy
     2  
     3  import (
     4  	"net"
     5  	"strconv"
     6  )
     7  
     8  //没有解析过的地址,可能有ip,有域名,也可能有端口号
     9  type UnsolvedAddr struct {
    10  	Ip     net.IP
    11  	Domain string
    12  	Port   uint16
    13  }
    14  
    15  func (uaddr UnsolvedAddr) String() string {
    16  	if uaddr.Ip != nil {
    17  		return net.JoinHostPort(uaddr.Ip.String(), strconv.Itoa(int(uaddr.Port)))
    18  	} else {
    19  		return net.JoinHostPort(uaddr.Domain, strconv.Itoa(int(uaddr.Port)))
    20  	}
    21  }
    22  
    23  func ParseUnsolvedAddr(addr string) (uaddr UnsolvedAddr, err error) {
    24  	host, port, err := net.SplitHostPort(addr)
    25  	if err != nil {
    26  		return
    27  	}
    28  	iport, err := strconv.Atoi(port)
    29  	if err != nil {
    30  		return
    31  	}
    32  	uaddr.Port = uint16(iport)
    33  	uaddr.Ip = net.ParseIP(host)
    34  	if uaddr.Ip == nil {
    35  		uaddr.Domain = host
    36  		return uaddr, nil
    37  	}
    38  	return uaddr, nil
    39  }