WSL needs ReuseAddr in addition to ReusePort (which it doesn't honor) (#1149)
This commit is contained in:
parent
51b27779c9
commit
bf29590f41
|
@ -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<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();
|
||||
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(),
|
||||
|
|
Loading…
Reference in New Issue