Skip to content

Commit d255350

Browse files
committed
net: wasip2: implement GetHostByName
1 parent 258518d commit d255350

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

netdev_wasip2.go

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
instancenetwork "internal/wasi/sockets/v0.2.0/instance-network"
14+
ipnamelookup "internal/wasi/sockets/v0.2.0/ip-name-lookup"
1415
"internal/wasi/sockets/v0.2.0/network"
1516
)
1617

@@ -78,10 +79,33 @@ func init() {
7879
})
7980
}
8081

81-
// TODO: use ip-name-lookup
8282
func (n *wasip2Netdev) GetHostByName(name string) (netip.Addr, error) {
83-
fmt.Println("wasip2 TODO GetHostByName") ///
84-
return netip.Addr{}, errors.New("wasip2 TODO GetHostByName")
83+
res := ipnamelookup.ResolveAddresses(n.net, name)
84+
85+
if res.IsErr() {
86+
return netip.Addr{}, fmt.Errorf("failed to resolve address: %s", res.Err().String())
87+
}
88+
89+
stream := res.OK()
90+
pollable := stream.Subscribe()
91+
92+
for {
93+
pollable.Block()
94+
res := stream.ResolveNextAddress()
95+
96+
if res.IsErr() {
97+
return netip.Addr{}, fmt.Errorf("failed to get resolved address: %s", res.Err().String())
98+
}
99+
100+
if res.OK().None() {
101+
return netip.Addr{}, errors.New("no addresses found")
102+
}
103+
104+
// TODO: handle IPv6
105+
if addr4 := res.OK().Some().IPv4(); addr4 != nil {
106+
return netip.AddrFrom4(*addr4), nil
107+
}
108+
}
85109
}
86110

87111
func (n *wasip2Netdev) Addr() (netip.Addr, error) {

0 commit comments

Comments
 (0)