dispatchrun / net

Go package implementing WASI socket extensions
Apache License 2.0
137 stars 7 forks source link

wasmedge: sending UDP datagrams fails with Invalid argument error #34

Open marten-seemann opened 3 months ago

marten-seemann commented 3 months ago

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.

achille-roussel commented 3 months ago

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:

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!