wasmedge: sending UDP datagrams fails with Invalid argument error
Hi guys, author of quic-go here 👋
I'm trying to compile a simple quic-go server and client to WASM, and I'm running into the following problem: sending UDP datagrams fails with an Invalid argument error.
I managed to distill it down to this simple example:
func main() {
conn, err := wasip1.ListenPacket("udp", "127.0.0.1:6121")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
if _, err := conn.WriteTo([]byte("foobar"), &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 1234}); err != nil {
log.Fatalf("failed to write: %v", err)
}
}
The above code works when using wasirun, but it fails with wasmedge.
Apologies if I'm missing something obvious, or if I opened the issue in the wrong repo. I'm pretty new to WASM.
I think your code is correct, and if it works with wasirun there's at least some combination of guest+host that's functional!
A couple of things that may cause the issue:
- wasmedge has changed their ABI and we need to adapt wasi-go
- there are flags we use in some socket calls that aren't supported by wasmedge
I'd recommend trying to run with some kind of debug logs enabled to trace the host function calls that the program makes, this could provide insight into where things are breaking. For example, with wasirun, this can be done with the --trace option.
I hope this is useful!