From 7ed9c74f114ec7980db741187fb7d5edb2919c3a Mon Sep 17 00:00:00 2001 From: QuackitsQuinn Date: Sat, 18 May 2024 22:26:35 -0500 Subject: [PATCH 1/2] Remove old port code and default to port 0 --- lazuli_core/src/client/mod.rs | 26 ++------------------------ lazuli_core/src/client/server.rs | 6 ++++-- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/lazuli_core/src/client/mod.rs b/lazuli_core/src/client/mod.rs index 51eb6ea..1873793 100644 --- a/lazuli_core/src/client/mod.rs +++ b/lazuli_core/src/client/mod.rs @@ -24,32 +24,12 @@ mod test_utils { use self::server::Server; use super::*; - static PORTS_BASE: u16 = 5000; - static PORT_ACTIVE_BASE: Mutex = Mutex::new(PORTS_BASE); - - fn addr_in_use(addr: SocketAddr) -> bool { - use std::net::TcpListener; - TcpListener::bind(addr).is_err() - } - - pub(super) fn get_socket_addr() -> SocketAddr { - let mut port = *PORT_ACTIVE_BASE.lock().unwrap(); - let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), port); - while addr_in_use(addr) { - debug!("Port {} is in use, trying next port.", port); - port += 1; - } - *PORT_ACTIVE_BASE.lock().unwrap() = port + 1; - addr - } /// Creates a client and server pair. /// (client, server) pub(super) fn make_client_server_pair() -> (Client, Client) { use std::net::TcpListener; - let server = TcpListener::bind((Ipv4Addr::LOCALHOST, *PORT_ACTIVE_BASE.lock().unwrap())); - - *PORT_ACTIVE_BASE.lock().unwrap() += 1; + let server = TcpListener::bind((Ipv4Addr::LOCALHOST, 0)); if let Err(e) = server { // If the port is in use, try again. @@ -69,7 +49,7 @@ mod test_utils { } pub(super) fn make_server() -> Server { - let server = Server::new((Ipv4Addr::LOCALHOST, *PORT_ACTIVE_BASE.lock().unwrap())); + let server = Server::new((Ipv4Addr::LOCALHOST, 0)); if let Err(e) = server { // If the port is in use, try again. @@ -80,8 +60,6 @@ mod test_utils { } } - *PORT_ACTIVE_BASE.lock().unwrap() += 1; - server.unwrap() } diff --git a/lazuli_core/src/client/server.rs b/lazuli_core/src/client/server.rs index aa00fb7..7496395 100644 --- a/lazuli_core/src/client/server.rs +++ b/lazuli_core/src/client/server.rs @@ -74,7 +74,9 @@ impl Server { #[cfg(test)] mod test { - use crate::client::test_utils::{get_socket_addr, make_server, test_send_recv}; + use std::net::Ipv4Addr; + + use crate::client::test_utils::{make_server, test_send_recv}; use super::*; @@ -114,7 +116,7 @@ mod test { } #[test] fn test_nonblocking_server() -> Result<()> { - let mut server = Server::new_nonblocking(get_socket_addr())?; + let mut server = Server::new_nonblocking((Ipv4Addr::LOCALHOST, 0))?; assert!(server.accept().is_err()); if let Err(e) = server.accept() { assert_eq!(e.kind(), std::io::ErrorKind::WouldBlock); From b0dde407ca41fc4a3344724a798409cfb2fe36e5 Mon Sep 17 00:00:00 2001 From: QuackitsQuinn Date: Sat, 18 May 2024 22:57:15 -0500 Subject: [PATCH 2/2] Simplify old code --- lazuli_core/src/client/mod.rs | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/lazuli_core/src/client/mod.rs b/lazuli_core/src/client/mod.rs index 1873793..b076ae8 100644 --- a/lazuli_core/src/client/mod.rs +++ b/lazuli_core/src/client/mod.rs @@ -29,38 +29,16 @@ mod test_utils { /// (client, server) pub(super) fn make_client_server_pair() -> (Client, Client) { use std::net::TcpListener; - let server = TcpListener::bind((Ipv4Addr::LOCALHOST, 0)); - - if let Err(e) = server { - // If the port is in use, try again. - if e.kind() == std::io::ErrorKind::AddrInUse { - return make_client_server_pair(); - } else { - panic!("Failed to bind server: {}", e); - } - } - - let server = server.unwrap(); + let server = TcpListener::bind((Ipv4Addr::LOCALHOST, 0)).expect("Failed to create server!"); let client = Client::connect(server.local_addr().unwrap()).unwrap(); let server = server.accept().unwrap().0; (client, Client::from_stream(server)) } - + /// Creates a Server. Expects the OS to assign a port. pub(super) fn make_server() -> Server { - let server = Server::new((Ipv4Addr::LOCALHOST, 0)); - - if let Err(e) = server { - // If the port is in use, try again. - if e.kind() == std::io::ErrorKind::AddrInUse { - return make_server(); - } else { - panic!("Failed to bind server: {}", e); - } - } - - server.unwrap() + Server::new((Ipv4Addr::LOCALHOST, 0)).expect("Failed to create server!") } /// Tests sending and receiving data. Convenience function for testing.