summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKelvin Zhang <zhangxp1998@gmail.com>2020-01-07 20:27:45 -0500
committerKelvin Zhang <zhangxp1998@gmail.com>2020-01-08 12:07:50 -0500
commitc927ba90e6439e9e4a68e17ed50a5a84d17a6493 (patch)
treeb7d84b89351abc9094953926fed272d391886b8e /src
parent8b1f25dcf6f2d5aca83099203f59107fb84cd909 (diff)
Fix issue #84 by handle error more gracefully
Diffstat (limited to 'src')
-rw-r--r--src/os/linux.rs63
1 files changed, 33 insertions, 30 deletions
diff --git a/src/os/linux.rs b/src/os/linux.rs
index 9ca566c..e863e4f 100644
--- a/src/os/linux.rs
+++ b/src/os/linux.rs
@@ -8,44 +8,47 @@ use crate::OpenSockets;
pub(crate) fn get_open_sockets() -> OpenSockets {
let mut open_sockets = HashMap::new();
let mut connections = std::vec::Vec::new();
- let all_procs = procfs::process::all_processes().unwrap();
-
let mut inode_to_procname = HashMap::new();
- for process in all_procs {
- if let Ok(fds) = process.fd() {
- let procname = process.stat.comm;
- for fd in fds {
- if let FDTarget::Socket(inode) = fd.target {
- inode_to_procname.insert(inode, procname.clone());
+
+ if let Ok(all_procs) = procfs::process::all_processes() {
+ for process in all_procs {
+ if let Ok(fds) = process.fd() {
+ let procname = process.stat.comm;
+ for fd in fds {
+ if let FDTarget::Socket(inode) = fd.target {
+ inode_to_procname.insert(inode, procname.clone());
+ }
}
}
}
}
- let tcp = ::procfs::net::tcp().unwrap();
- for entry in tcp.into_iter() {
- let local_port = entry.local_address.port();
- let local_ip = entry.local_address.ip();
- if let (Some(connection), Some(procname)) = (
- Connection::new(entry.remote_address, local_ip, local_port, Protocol::Tcp),
- inode_to_procname.get(&entry.inode),
- ) {
- open_sockets.insert(connection.local_socket, procname.clone());
- connections.push(connection);
- };
+ if let Ok(tcp) = ::procfs::net::tcp() {
+ for entry in tcp.into_iter() {
+ let local_port = entry.local_address.port();
+ let local_ip = entry.local_address.ip();
+ if let (Some(connection), Some(procname)) = (
+ Connection::new(entry.remote_address, local_ip, local_port, Protocol::Tcp),
+ inode_to_procname.get(&entry.inode),
+ ) {
+ open_sockets.insert(connection.local_socket, procname.clone());
+ connections.push(connection);
+ };
+ }
}
- let udp = ::procfs::net::udp().unwrap();
- for entry in udp.into_iter() {
- let local_port = entry.local_address.port();
- let local_ip = entry.local_address.ip();
- if let (Some(connection), Some(procname)) = (
- Connection::new(entry.remote_address, local_ip, local_port, Protocol::Udp),
- inode_to_procname.get(&entry.inode),
- ) {
- open_sockets.insert(connection.local_socket, procname.clone());
- connections.push(connection);
- };
+ if let Ok(udp) = ::procfs::net::udp() {
+ for entry in udp.into_iter() {
+ let local_port = entry.local_address.port();
+ let local_ip = entry.local_address.ip();
+ if let (Some(connection), Some(procname)) = (
+ Connection::new(entry.remote_address, local_ip, local_port, Protocol::Udp),
+ inode_to_procname.get(&entry.inode),
+ ) {
+ open_sockets.insert(connection.local_socket, procname.clone());
+ connections.push(connection);
+ };
+ }
}
OpenSockets {
sockets_to_procs: open_sockets,