diff options
author | Kelvin Zhang <zhangxp1998@gmail.com> | 2020-01-14 11:10:35 -0500 |
---|---|---|
committer | Aram Drevekenin <aram@poor.dev> | 2020-01-14 17:10:35 +0100 |
commit | be531652830e0c8c5c1040dbb16f213c3a4f553c (patch) | |
tree | 288aab48d0e91cabc82909e97b79184fd6e64e7f | |
parent | 0edc6c2a9cdf0fbd2a7b295fea646242819677e8 (diff) |
fix(network): bug that upload speed is not tabulated correctly (#116)
-rw-r--r-- | src/os/shared.rs | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/os/shared.rs b/src/os/shared.rs index afa7330..d336357 100644 --- a/src/os/shared.rs +++ b/src/os/shared.rs @@ -100,15 +100,28 @@ pub fn get_input( let network_frames = network_interfaces .iter() - .map(|iface| get_datalink_channel(iface)); - - let available_network_frames = network_frames - .clone() - .filter_map(Result::ok) - .collect::<Vec<_>>(); + .filter(|iface| iface.is_up() && !iface.ips.is_empty()) + .map(|iface| (iface, get_datalink_channel(iface))); + + let (available_network_frames, network_interfaces) = { + let network_frames = network_frames.clone(); + let mut available_network_frames = Vec::new(); + let mut available_interfaces: Vec<NetworkInterface> = Vec::new(); + for (iface, rx) in network_frames.filter_map(|(iface, channel)| { + if let Ok(rx) = channel { + Some((iface, rx)) + } else { + None + } + }) { + available_interfaces.push(iface.clone()); + available_network_frames.push(rx); + } + (available_network_frames, available_interfaces) + }; if available_network_frames.is_empty() { - for iface in network_frames { + for (_, iface) in network_frames { if let Some(iface_error) = iface.err() { if let ErrorKind::PermissionDenied = iface_error.kind() { failure::bail!(eperm_message()) |