X-Git-Url: https://code.octet-stream.net/netwatcher/blobdiff_plain/d2c9a9f306a336aa9dd8ddfb6579746e4f10b7a4..473c9605820f4531f9d40823338fa4bf8718dd6f:/src/lib.rs diff --git a/src/lib.rs b/src/lib.rs index 5c8d73d..6d22c98 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,13 +4,18 @@ use std::{ ops::Sub, }; +use nix::errno::Errno; + #[cfg_attr(windows, path = "list_win.rs")] #[cfg_attr(unix, path = "list_unix.rs")] mod list; #[cfg_attr(windows, path = "watch_win.rs")] #[cfg_attr(target_vendor = "apple", path = "watch_mac.rs")] -#[cfg_attr(target_os = "linux", path = "watch_linux.rs")] +#[cfg_attr( + any(target_os = "linux", target_os = "android"), + path = "watch_linux.rs" +)] mod watch; type IfIndex = u32; @@ -71,7 +76,12 @@ pub struct InterfaceDiff { /// Errors in netwatcher or in one of the underlying platform integratinos. #[derive(Debug, Clone, PartialEq, Eq)] pub enum Error { - // TODO: handle all cases with proper sources + CreateSocket(Errno), + Bind(Errno), + CreatePipe(Errno), + Getifaddrs(Errno), + GetInterfaceName(Errno), + FormatMacAddress, Internal, } @@ -145,6 +155,13 @@ pub fn list_interfaces() -> Result, Error> { /// /// The callback will fire once immediately with an initial interface list, and a diff as if /// there were originally no interfaces present. +/// +/// This function will return an error if there is a problem configuring the watcher, or if there +/// is an error retrieving the initial interface list. +/// +/// We assume that if listing the interfaces worked the first time, then it will continue to work +/// for as long as the watcher is running. If listing interfaces begins to fail later, those +/// failures will be swallowed and the callback will not be called for that change event. pub fn watch_interfaces( callback: F, ) -> Result {