UdpTpuConnection no longer restricts its local port to the 8000-10000 range

This commit is contained in:
Michael Vines 2022-06-17 12:36:56 -07:00
parent b3d1f8d1ac
commit dd0852bc49
3 changed files with 24 additions and 8 deletions

View File

@ -19,8 +19,7 @@ pub struct UdpTpuConnection {
impl UdpTpuConnection {
pub fn new(tpu_addr: SocketAddr) -> Self {
let socket =
solana_net_utils::bind_in_validator_port_range(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)))
.unwrap();
solana_net_utils::bind_with_any_port(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0))).unwrap();
socket.set_nonblocking(true).unwrap();
Self::new_with_std_socket(tpu_addr, socket)
}
@ -104,8 +103,7 @@ mod tests {
let addr_str = "0.0.0.0:50101";
let addr = addr_str.parse().unwrap();
let socket =
solana_net_utils::bind_in_validator_port_range(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)))
.unwrap();
solana_net_utils::bind_with_any_port(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0))).unwrap();
socket.set_nonblocking(true).unwrap();
let connection = UdpTpuConnection::new_with_std_socket(addr, socket);
let reader = UdpSocket::bind(addr_str).await.expect("bind");

View File

@ -20,8 +20,7 @@ pub struct UdpTpuConnection {
impl UdpTpuConnection {
pub fn new_from_addr(tpu_addr: SocketAddr) -> Self {
let socket =
solana_net_utils::bind_in_validator_port_range(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)))
.unwrap();
solana_net_utils::bind_with_any_port(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0))).unwrap();
Self {
socket,
addr: tpu_addr,

View File

@ -439,8 +439,16 @@ pub fn bind_in_range(ip_addr: IpAddr, range: PortRange) -> io::Result<(u16, UdpS
))
}
pub fn bind_in_validator_port_range(ip_addr: IpAddr) -> io::Result<UdpSocket> {
bind_in_range(ip_addr, VALIDATOR_PORT_RANGE).map(|(_, socket)| socket)
pub fn bind_with_any_port(ip_addr: IpAddr) -> io::Result<UdpSocket> {
let sock = udp_socket(false)?;
let addr = SocketAddr::new(ip_addr, 0);
match sock.bind(&SockAddr::from(addr)) {
Ok(_) => Result::Ok(sock.into()),
Err(err) => Err(io::Error::new(
io::ErrorKind::Other,
format!("No available UDP port: {}", err),
)),
}
}
// binds many sockets to the same port in a range
@ -680,6 +688,17 @@ mod tests {
}
}
#[test]
fn test_bind_with_any_port() {
let ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));
let x = bind_with_any_port(ip_addr).unwrap();
let y = bind_with_any_port(ip_addr).unwrap();
assert_ne!(
x.local_addr().unwrap().port(),
y.local_addr().unwrap().port()
);
}
#[test]
fn test_bind_in_range_nil() {
let ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));