feat(server): add idle_timeout to Server

Closes #790
This commit is contained in:
Sean McArthur
2016-07-14 17:23:13 -07:00
parent 8de8b74a8f
commit 02cb96ac2d

View File

@@ -117,6 +117,7 @@ impl<A: Accept> Server<A> where A::Output: Transport {
config.slab_capacity(self.max_sockets);
config.mio().notify_capacity(self.max_sockets);
let keep_alive = self.keep_alive;
let idle_timeout = self.idle_timeout;
let mut loop_ = rotor::Loop::new(&config).unwrap();
let mut notifier = None;
{
@@ -135,8 +136,9 @@ impl<A: Accept> Server<A> where A::Output: Transport {
};
let server = ServerLoop {
inner: Some((loop_, Context {
factory: factory,
idle_timeout: idle_timeout,
keep_alive: keep_alive,
factory: factory
}))
};
Ok((listening, server))
@@ -162,8 +164,9 @@ impl<A: Accept, H: HandlerFactory<A::Output>> Drop for ServerLoop<A, H> {
}
struct Context<F> {
keep_alive: bool,
factory: F,
idle_timeout: Option<Duration>,
keep_alive: bool,
}
impl<F: HandlerFactory<T>, T: Transport> http::MessageHandlerFactory<(), T> for Context<F> {
@@ -174,7 +177,11 @@ impl<F: HandlerFactory<T>, T: Transport> http::MessageHandlerFactory<(), T> for
}
fn keep_alive_interest(&self) -> Next {
Next::read()
if let Some(dur) = self.idle_timeout {
Next::read().timeout(dur)
} else {
Next::read()
}
}
}