Skip to content

Commit 3c15880

Browse files
authored
Handle IPv6 on Linux (#2)
1 parent 9bde75a commit 3c15880

File tree

4 files changed

+36
-5
lines changed

4 files changed

+36
-5
lines changed

dns.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func Resolve(name string, defaultPort int) ([]net.TCPAddr, error) {
3838
}
3939

4040
// The hostname might not be there (if it's an address)
41-
if url.Hostname() != "" {
41+
if url.Hostname() != "" && url.Hostname() != "::" {
4242
name = url.Hostname()
4343
}
4444

go.mod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
11
module github.com/emitter-io/address
2+
3+
go 1.16
4+
5+
require github.com/stretchr/testify v1.7.0

go.sum

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
2+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
6+
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
7+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
8+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
9+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
10+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
11+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

ipaddr.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,40 @@ func Parse(addr string, defaultPort int) (*net.TCPAddr, error) {
3030
// Convenience: set private address
3131
if strings.Contains(addr, "private") {
3232
private := GetPrivateOrDefault(Loopback)
33-
addr = strings.Replace(addr, "private", private.String(), 1)
33+
if private.IP.To4() == nil && strings.Contains(addr, ":") {
34+
addr = strings.Replace(addr, "private", fmt.Sprintf("[%v]", private.String()), 1)
35+
} else {
36+
addr = strings.Replace(addr, "private", private.String(), 1)
37+
}
3438
}
3539

3640
// Convenience: set public address
3741
if strings.Contains(addr, "external") {
3842
external := GetExternalOrDefault(Loopback)
39-
addr = strings.Replace(addr, "external", external.String(), 1)
43+
if external.IP.To4() == nil && strings.Contains(addr, ":") {
44+
addr = strings.Replace(addr, "external", fmt.Sprintf("[%v]", external.String()), 1)
45+
} else {
46+
addr = strings.Replace(addr, "external", external.String(), 1)
47+
}
4048
}
4149

4250
// Convenience: set public address
4351
if strings.Contains(addr, "public") {
4452
public := GetPublicOrDefault(Loopback)
45-
addr = strings.Replace(addr, "public", public.String(), 1)
53+
if public.IP.To4() == nil && strings.Contains(addr, ":") {
54+
addr = strings.Replace(addr, "public", fmt.Sprintf("[%v]", public.String()), 1)
55+
} else {
56+
addr = strings.Replace(addr, "public", public.String(), 1)
57+
}
4658
}
4759

4860
// If we have only an IP address, use the default port
4961
if ip := net.ParseIP(addr); ip != nil {
50-
addr = fmt.Sprintf("%s:%d", ip, defaultPort)
62+
if ip != nil && ip.To4() == nil {
63+
addr = fmt.Sprintf("[%s]:%d", ip, defaultPort)
64+
} else {
65+
addr = fmt.Sprintf("%s:%d", ip, defaultPort)
66+
}
5167
}
5268

5369
// Resolve the address

0 commit comments

Comments
 (0)