Skip to content

Commit 709c414

Browse files
committed
Fix for UDP
1 parent 907672d commit 709c414

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

dial_wasip1.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ func DialContext(ctx context.Context, network, address string) (Conn, error) {
3232
}
3333

3434
func dialAddr(addr net.Addr) (Conn, error) {
35-
fd, err := syscall.Socket(family(addr), socketType(addr), 0)
35+
proto := family(addr)
36+
sotype := socketType(addr)
37+
38+
fd, err := syscall.Socket(proto, sotype, 0)
3639
if err != nil {
3740
return nil, err
3841
}
@@ -42,6 +45,13 @@ func dialAddr(addr net.Addr) (Conn, error) {
4245
return nil, fmt.Errorf("SetNonblock: %w", err)
4346
}
4447

48+
if sotype == syscall.SOCK_DGRAM && proto != syscall.AF_UNIX {
49+
if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1); err != nil {
50+
syscall.Close(fd)
51+
return nil, err
52+
}
53+
}
54+
4555
var inProgress bool
4656
switch err := syscall.Connect(fd, socketAddress(addr)); err {
4757
case nil:
@@ -102,7 +112,7 @@ func family(addr net.Addr) int {
102112
var ip net.IP
103113
switch a := addr.(type) {
104114
case *net.UnixAddr:
105-
panic("not implemented")
115+
return syscall.AF_UNIX
106116
case *net.TCPAddr:
107117
ip = a.IP
108118
case *net.UDPAddr:
@@ -136,7 +146,7 @@ func socketAddress(addr net.Addr) syscall.Sockaddr {
136146
var port int
137147
switch a := addr.(type) {
138148
case *net.UnixAddr:
139-
panic("not implemented")
149+
return &syscall.SockaddrUnix{Name: a.Name}
140150
case *net.TCPAddr:
141151
ip, port = a.IP, a.Port
142152
case *net.UDPAddr:

lookup_wasip1.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77

88
func lookupAddr(context, network, address string) (net.Addr, error) {
99
switch network {
10-
case "tcp", "tcp4", "tcp6", "udp", "udp4", "udp6":
10+
case "tcp", "tcp4", "tcp6":
11+
case "udp", "udp4", "udp6":
1112
case "unix", "unixgram":
1213
return &net.UnixAddr{Name: address, Net: network}, nil
1314
default:
@@ -50,5 +51,19 @@ func lookupAddr(context, network, address string) (net.Addr, error) {
5051
}
5152
}
5253
}
53-
return nil, fmt.Errorf("no route to host: %v", host)
54+
if network == "udp" || network == "udp4" {
55+
for _, ip := range ips {
56+
if len(ip) == net.IPv4len {
57+
return &net.UDPAddr{IP: ip, Port: port}, nil
58+
}
59+
}
60+
}
61+
if network == "udp" || network == "udp6" {
62+
for _, ip := range ips {
63+
if len(ip) == net.IPv6len {
64+
return &net.UDPAddr{IP: ip, Port: port}, nil
65+
}
66+
}
67+
}
68+
return nil, fmt.Errorf("cannot listen on %q", host)
5469
}

syscall/net_wasip1.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const (
1313
_ = iota
1414
AF_INET
1515
AF_INET6
16+
AF_UNIX
1617
)
1718

1819
const (
@@ -29,6 +30,8 @@ const (
2930
SO_REUSEADDR = iota
3031
_
3132
SO_ERROR
33+
_
34+
SO_BROADCAST
3235
)
3336

3437
type Sockaddr interface {

0 commit comments

Comments
 (0)