Add pubsub module for rpc info subscriptions (#1439)

This commit is contained in:
Tyera Eulberg
2018-10-10 14:51:43 -06:00
committed by GitHub
parent 24a993710d
commit 785c619198
8 changed files with 1073 additions and 5 deletions

View File

@ -7,7 +7,7 @@ use rand::{thread_rng, Rng};
use reqwest;
use socket2::{Domain, SockAddr, Socket, Type};
use std::io;
use std::net::{IpAddr, Ipv4Addr, SocketAddr, UdpSocket};
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpListener, UdpSocket};
use std::os::unix::io::AsRawFd;
/// A data type representing a public Udp socket
@ -159,6 +159,26 @@ pub fn bind_to(port: u16, reuseaddr: bool) -> io::Result<UdpSocket> {
}
}
pub fn find_available_port_in_range(range: (u16, u16)) -> io::Result<u16> {
let (start, end) = range;
let mut tries_left = end - start;
loop {
let rand_port = thread_rng().gen_range(start, end);
match TcpListener::bind(SocketAddr::new(
IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)),
rand_port,
)) {
Ok(_) => {
break Ok(rand_port);
}
Err(err) => if err.kind() != io::ErrorKind::AddrInUse || tries_left == 0 {
return Err(err);
},
}
tries_left -= 1;
}
}
#[cfg(test)]
mod tests {
use ipnetwork::IpNetwork;