diff --git a/src/nat.rs b/src/nat.rs index fd2ac6ff7a..5c10671ed0 100644 --- a/src/nat.rs +++ b/src/nat.rs @@ -3,7 +3,7 @@ extern crate reqwest; use nix::sys::socket::setsockopt; -use nix::sys::socket::sockopt::ReusePort; +use nix::sys::socket::sockopt::{ReuseAddr, ReusePort}; use pnet_datalink as datalink; use rand::{thread_rng, Rng}; use socket2::{Domain, SockAddr, Socket, Type}; @@ -79,6 +79,7 @@ pub fn bind_in_range(range: (u16, u16)) -> io::Result { let sock = Socket::new(Domain::ipv4(), Type::dgram(), None).unwrap(); let sock_fd = sock.as_raw_fd(); setsockopt(sock_fd, ReusePort, &true).unwrap(); + setsockopt(sock_fd, ReuseAddr, &true).unwrap(); loop { let rand_port = thread_rng().gen_range(start, end); let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), rand_port); @@ -97,6 +98,7 @@ pub fn bind_to(port: u16) -> UdpSocket { let sock = Socket::new(Domain::ipv4(), Type::dgram(), None).unwrap(); let sock_fd = sock.as_raw_fd(); setsockopt(sock_fd, ReusePort, &true).unwrap(); + setsockopt(sock_fd, ReuseAddr, &true).unwrap(); let addr = socketaddr!(0, port); match sock.bind(&SockAddr::from(addr)) { Ok(_) => sock.into_udp_socket(),