diff --git a/examples/ping4.rs b/examples/ping4.rs index c9835fc..8330d07 100644 --- a/examples/ping4.rs +++ b/examples/ping4.rs @@ -74,11 +74,12 @@ pub fn main() { socket4 .send_to(address.parse::().unwrap(), packet) .unwrap(); + socket4.set_timeout(Duration::from_secs(1)).unwrap(); loop { - let (resp, sock_addr) = match socket4.rcv_with_timeout(Duration::from_secs(1)) { + let (resp, sock_addr) = match socket4.rcv_from() { Ok(tpl) => tpl, Err(e) => { - //eprintln!("{:?}", e); + eprintln!("{:?}", e); break; } }; diff --git a/examples/ping6.rs b/examples/ping6.rs index 7cff2bd..e0dcd3e 100644 --- a/examples/ping6.rs +++ b/examples/ping6.rs @@ -72,11 +72,12 @@ pub fn main() { socket6 .send_to(address.parse::().unwrap(), packet) .unwrap(); + socket6.set_timeout(Duration::from_secs(1)).unwrap(); loop { - let (resp, sock_addr) = match socket6.rcv_with_timeout(Duration::from_secs(1)) { + let (resp, sock_addr) = match socket6.rcv_from() { Ok(tpl) => tpl, Err(e) => { - //eprintln!("{:?}", e); + eprintln!("{:?}", e); break; } }; diff --git a/src/socket.rs b/src/socket.rs index 9101fa8..cf7d3da 100644 --- a/src/socket.rs +++ b/src/socket.rs @@ -30,6 +30,8 @@ pub trait IcmpSocket { type AddrType; type PacketType; + fn set_timeout(&mut self, timeout: Duration) -> std::io::Result<()>; + fn set_max_hops(&mut self, hops: u32); fn bind>(&mut self, addr: A) -> std::io::Result<()>; @@ -37,11 +39,6 @@ pub trait IcmpSocket { fn send_to(&mut self, dest: Self::AddrType, packet: Self::PacketType) -> std::io::Result<()>; fn rcv_from(&mut self) -> std::io::Result<(Self::PacketType, SockAddr)>; - - fn rcv_with_timeout( - &mut self, - timeout: Duration, - ) -> std::io::Result<(Self::PacketType, SockAddr)>; } pub struct Opts { @@ -98,13 +95,8 @@ impl IcmpSocket for IcmpSocket4 { Ok((self.buf[0..read_count].try_into()?, addr)) } - fn rcv_with_timeout( - &mut self, - timeout: Duration, - ) -> std::io::Result<(Self::PacketType, SockAddr)> { - self.inner.set_read_timeout(Some(timeout))?; - let (read_count, addr) = self.inner.recv_from(&mut self.buf)?; - Ok((self.buf[0..read_count].try_into()?, addr)) + fn set_timeout(&mut self, timeout: Duration) -> std::io::Result<()> { + self.inner.set_read_timeout(Some(timeout)) } } @@ -172,13 +164,8 @@ impl IcmpSocket for IcmpSocket6 { Ok((self.buf[0..read_count].try_into()?, addr)) } - fn rcv_with_timeout( - &mut self, - timeout: Duration, - ) -> std::io::Result<(Self::PacketType, SockAddr)> { - self.inner.set_read_timeout(Some(timeout))?; - let (read_count, addr) = self.inner.recv_from(&mut self.buf)?; - Ok((self.buf[0..read_count].try_into()?, addr)) + fn set_timeout(&mut self, timeout: Duration) -> std::io::Result<()> { + self.inner.set_read_timeout(Some(timeout)) } }