chiark / gitweb /
timereader: Provide useful methods
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 16 May 2021 19:12:53 +0000 (20:12 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 17 May 2021 10:07:27 +0000 (11:07 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/timedread.rs

index 4a7d27fda0eaa4b698e509646d072e561f9dc23d..122b59fd47b7b40ea6746598379c4cb8b6203e6c 100644 (file)
@@ -44,6 +44,11 @@ impl nix::Error {
 }
 
 impl TimedFdReader {
+  #[throws(io::Error)]
+  pub fn new<F>(fd: F) -> TimedFdReader where F: IntoRawFd {
+    Self::from_fd( Fd::from_raw_fd( fd.into_raw_fd() ))?
+  }
+
   /// Takes ownership of the fd
   #[throws(io::Error)]
   pub fn from_fd(fd: Fd) -> Self {
@@ -59,6 +64,15 @@ impl TimedFdReader {
     let events = mio::event::Events::with_capacity(1);
     TimedFdReader { fd, poll, events, deadline: None }
   }
+
+  pub fn set_deadline(&mut self, deadline: Option<Instant>) {
+    self.deadline = deadline;
+  }
+  pub fn set_timeout(&mut self, timeout: Option<Duration>) {
+    self.deadline = timeout.map(|timeout|{
+      Instant::now() + timeout
+    });
+  }
 }
 
 impl Read for TimedFdReader {