blob: 72b959e6bec7e2c19c7142459af3d2df61403859 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package netutil
import (
"net"
"strconv"
"strings"
)
// An addr that is neither restricted to TCP nor UDP, but has an IP and a port.
type PortAddr struct {
IP net.IP
Port uint16
}
// Parses an IP address with a port, for example "209.197.29.196:27017".
// If the given string is not valid, this function returns nil.
func ParsePortAddr(addr string) *PortAddr {
parts := strings.Split(addr, ":")
if len(parts) != 2 {
return nil
}
ip := net.ParseIP(parts[0])
if ip == nil {
return nil
}
port, err := strconv.ParseUint(parts[1], 10, 16)
if err != nil {
return nil
}
return &PortAddr{ip, uint16(port)}
}
func (p *PortAddr) ToTCPAddr() *net.TCPAddr {
return &net.TCPAddr{p.IP, int(p.Port), ""}
}
func (p *PortAddr) ToUDPAddr() *net.UDPAddr {
return &net.UDPAddr{p.IP, int(p.Port), ""}
}
func (p *PortAddr) String() string {
return p.IP.String() + ":" + strconv.FormatUint(uint64(p.Port), 10)
}
|