diff --git a/Dockerfile b/Dockerfile index f7aafdc..559f809 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,11 +25,10 @@ FROM rust:latest AS musl-builder && rustup target add "$ARCH-unknown-linux-musl" \ && cargo build --release --target "$ARCH-unknown-linux-musl" - RUN mkdir /.etc \ - && touch /.etc/resolv.conf \ - && mkdir /.tmp \ - && chmod 777 /.tmp \ - && chmod +t /.tmp + RUN mkdir -p etc tmp \ + && touch etc/resolv.conf \ + && chmod 777 tmp \ + && chmod +t tmp #################################################################################################### ## Alpine image diff --git a/src/lib.rs b/src/lib.rs index b7be42c..ade5305 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -139,7 +139,15 @@ async fn create_tcp_stream(socket_queue: &Option>, peer: Socket async fn create_udp_stream(socket_queue: &Option>, peer: SocketAddr) -> std::io::Result { match &socket_queue { - None => UdpStream::connect(peer).await, + None => { + let bind_addr = match peer { + SocketAddr::V4(_) => SocketAddr::from((std::net::Ipv4Addr::UNSPECIFIED, 0)), + SocketAddr::V6(_) => SocketAddr::from((std::net::Ipv6Addr::UNSPECIFIED, 0)), + }; + let socket = UdpSocket::bind(bind_addr).await?; + socket.connect(peer).await?; + UdpStream::from_tokio(socket, peer).await + } Some(queue) => { let socket = queue.recv_udp(peer.ip().into()).await?; socket.connect(peer).await?;