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