| @@ -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,7 +177,11 @@ impl<F: HandlerFactory<T>, T: Transport> http::MessageHandlerFactory<(), T> for | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     fn keep_alive_interest(&self) -> Next { |     fn keep_alive_interest(&self) -> Next { | ||||||
|         Next::read() |         if let Some(dur) = self.idle_timeout { | ||||||
|  |             Next::read().timeout(dur) | ||||||
|  |         } else { | ||||||
|  |             Next::read() | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user