summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKelvin Zhang <zhangxp1998@gmail.com>2020-01-14 11:10:35 -0500
committerAram Drevekenin <aram@poor.dev>2020-01-14 17:10:35 +0100
commitbe531652830e0c8c5c1040dbb16f213c3a4f553c (patch)
tree288aab48d0e91cabc82909e97b79184fd6e64e7f
parent0edc6c2a9cdf0fbd2a7b295fea646242819677e8 (diff)
fix(network): bug that upload speed is not tabulated correctly (#116)
-rw-r--r--src/os/shared.rs27
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())