disable bound first, go with simple check

This commit is contained in:
John Smith 2022-03-17 20:31:07 -04:00
parent ca4da15a4b
commit ce833c42a6
2 changed files with 49 additions and 44 deletions

View File

@ -52,7 +52,7 @@ pub fn new_bound_shared_udp_socket(local_address: SocketAddr) -> Result<Socket,
) )
})?; })?;
log_net!("created shared udp socket on {:?}", &local_address); log_net!("created bound shared udp socket on {:?}", &local_address);
Ok(socket) Ok(socket)
} }
@ -83,15 +83,15 @@ pub fn new_bound_first_udp_socket(local_address: SocketAddr) -> Result<Socket, S
// Set 'reuse address' so future binds to this port will succeed // Set 'reuse address' so future binds to this port will succeed
// This does not work on Windows, where reuse options can not be set after the bind // This does not work on Windows, where reuse options can not be set after the bind
cfg_if! { // cfg_if! {
if #[cfg(unix)] { // if #[cfg(unix)] {
socket // socket
.set_reuse_address(true) // .set_reuse_address(true)
.map_err(|e| format!("Couldn't set reuse address: {}", e))?; // .map_err(|e| format!("Couldn't set reuse address: {}", e))?;
socket.set_reuse_port(true).map_err(|e| format!("Couldn't set reuse port: {}", e))?; // socket.set_reuse_port(true).map_err(|e| format!("Couldn't set reuse port: {}", e))?;
} // }
} // }
log_net!("created shared udp socket on {:?}", &local_address); log_net!("created bound first udp socket on {:?}", &local_address);
Ok(socket) Ok(socket)
} }
@ -119,6 +119,7 @@ pub fn new_unbound_shared_tcp_socket(domain: Domain) -> Result<Socket, String> {
socket.set_reuse_port(true).map_err(|e| format!("Couldn't set reuse port: {}", e))?; socket.set_reuse_port(true).map_err(|e| format!("Couldn't set reuse port: {}", e))?;
} }
} }
Ok(socket) Ok(socket)
} }
@ -132,6 +133,8 @@ pub fn new_bound_shared_tcp_socket(local_address: SocketAddr) -> Result<Socket,
.bind(&socket2_addr) .bind(&socket2_addr)
.map_err(|e| format!("failed to bind TCP socket: {}", e))?; .map_err(|e| format!("failed to bind TCP socket: {}", e))?;
log_net!("created bound shared tcp socket on {:?}", &local_address);
Ok(socket) Ok(socket)
} }
@ -167,15 +170,17 @@ pub fn new_bound_first_tcp_socket(local_address: SocketAddr) -> Result<Socket, S
.bind(&socket2_addr) .bind(&socket2_addr)
.map_err(|e| format!("failed to bind TCP socket: {}", e))?; .map_err(|e| format!("failed to bind TCP socket: {}", e))?;
// Set 'reuse address' so future binds to this port will succeed // // Set 'reuse address' so future binds to this port will succeed
// This does not work on Windows, where reuse options can not be set after the bind // // This does not work on Windows, where reuse options can not be set after the bind
cfg_if! { // cfg_if! {
if #[cfg(unix)] { // if #[cfg(unix)] {
socket // socket
.set_reuse_address(true) // .set_reuse_address(true)
.map_err(|e| format!("Couldn't set reuse address: {}", e))?; // .map_err(|e| format!("Couldn't set reuse address: {}", e))?;
socket.set_reuse_port(true).map_err(|e| format!("Couldn't set reuse port: {}", e))?; // socket.set_reuse_port(true).map_err(|e| format!("Couldn't set reuse port: {}", e))?;
} // }
} // }
log_net!("created bound first tcp socket on {:?}", &local_address);
Ok(socket) Ok(socket)
} }

View File

@ -100,18 +100,18 @@ impl Network {
} }
} }
if let (Some(bfs4), Some(bfs6)) = (bound_first_socket_v4, bound_first_socket_v6) { if let (Some(bfs4), Some(bfs6)) = (bound_first_socket_v4, bound_first_socket_v6) {
cfg_if! { //cfg_if! {
if #[cfg(windows)] { //if #[cfg(windows)] {
// On windows, drop the socket. This is a race condition, but there's // On windows, drop the socket. This is a race condition, but there's
// no way around it. This isn't for security anyway, it's to prevent multiple copies of the // no way around it. This isn't for security anyway, it's to prevent multiple copies of the
// app from binding on the same port. // app from binding on the same port.
drop(bfs4); drop(bfs4);
drop(bfs6); drop(bfs6);
inner.bound_first_udp.insert(udp_port, None); inner.bound_first_udp.insert(udp_port, None);
} else { //} else {
inner.bound_first_udp.insert(udp_port, Some((bfs4, bfs6))); // inner.bound_first_udp.insert(udp_port, Some((bfs4, bfs6)));
} //}
} //}
true true
} else { } else {
false false
@ -138,18 +138,18 @@ impl Network {
} }
} }
if let (Some(bfs4), Some(bfs6)) = (bound_first_socket_v4, bound_first_socket_v6) { if let (Some(bfs4), Some(bfs6)) = (bound_first_socket_v4, bound_first_socket_v6) {
cfg_if! { //cfg_if! {
if #[cfg(windows)] { //if #[cfg(windows)] {
// On windows, drop the socket. This is a race condition, but there's // On windows, drop the socket. This is a race condition, but there's
// no way around it. This isn't for security anyway, it's to prevent multiple copies of the // no way around it. This isn't for security anyway, it's to prevent multiple copies of the
// app from binding on the same port. // app from binding on the same port.
drop(bfs4); drop(bfs4);
drop(bfs6); drop(bfs6);
inner.bound_first_tcp.insert(tcp_port, None); inner.bound_first_tcp.insert(tcp_port, None);
} else { // } else {
inner.bound_first_tcp.insert(tcp_port, Some((bfs4, bfs6))); // inner.bound_first_tcp.insert(tcp_port, Some((bfs4, bfs6)));
} // }
} //}
true true
} else { } else {
false false