Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[WIP] - Forward reuse_port and reuse_addr when it's possible to #5312

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

rodjjo
Copy link

@rodjjo rodjjo commented Dec 19, 2024

The runtime exposes functions to allow us to set SO_REUSEADDR and SO_REUSEPORT, however it's not working:

wasmer run --net examples/rust_udp/target/wasm32-wasmer-wasi/debug/udp_example.rustc.wasm
Starting UDP server
Binding to 0.0.0.0:8080
Error: Os { code: 3, kind: AddrInUse, message: "Address in use" }

The example code:

use tokio::net::UdpSocket;
use std::io;
use std::net::{SocketAddr};
use socket2::{Socket, Domain, Type};


#[tokio::main]
async fn main() -> io::Result<()> {
    println!("Starting UDP server");
    let std_sock = Socket::new(Domain::IPV4, Type::DGRAM, None)?;
    std_sock.set_reuse_address(true)?;

    println!("Binding to 0.0.0.0:8080");

    let address: SocketAddr = "0.0.0.0:8080".parse().unwrap();
    let address = address.into();
    std_sock.bind(&address)?;
   
    let sock = UdpSocket::from_std(std_sock.into())?;

    let mut buf = [0; 1024];
    loop {
        let (len, addr) = sock.recv_from(&mut buf).await?;
        println!("{:?} bytes received from {:?}", len, addr);

        let len = sock.send_to(&buf[..len], addr).await?;
        println!("{:?} bytes sent", len);
    }
}

This pull request intend to solve issue-5247

I need help to understand the impact of the changes on other platforms, I tested it in my use case and I was able to reuse the address when I ran Wasmer on Ubuntu.

@rodjjo rodjjo force-pushed the reuse-addr-port-udp-socket branch from 7b51254 to ba5be63 Compare December 19, 2024 13:47
@rodjjo rodjjo marked this pull request as draft December 19, 2024 13:52
@rodjjo rodjjo marked this pull request as ready for review December 19, 2024 14:06
@rodjjo
Copy link
Author

rodjjo commented Dec 19, 2024

@maminrayej what do you think, would be that the way ?

Copy link
Contributor

@maminrayej maminrayej left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, although it needs a test to pin this behavior. You could try to add a WASIX test by looking at other tests and how they are set up.

As a bonus (not required for the PR to be merged), you could fix the same issue in other places such as listen_tcp.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants