Merge pull request #930 from jwilm/handle-keep-alive-hangup
fix(conn): Handle remote hangup
This commit is contained in:
		| @@ -553,6 +553,13 @@ impl<K: Key, T: Transport, H: MessageHandler<T>> Conn<K, T, H> { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if events.is_hup() { | ||||||
|  |             trace!("Conn::ready got hangup"); | ||||||
|  |             let _ = scope.deregister(&self.0.transport); | ||||||
|  |             self.on_remove(); | ||||||
|  |             return ReadyResult::Done(None); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         // if the user had an io interest, but the transport was blocked differently, |         // if the user had an io interest, but the transport was blocked differently, | ||||||
|         // the event needs to be translated to what the user was actually expecting. |         // the event needs to be translated to what the user was actually expecting. | ||||||
|         // |         // | ||||||
| @@ -593,7 +600,7 @@ impl<K: Key, T: Transport, H: MessageHandler<T>> Conn<K, T, H> { | |||||||
|             self.0.on_writable(scope); |             self.0.on_writable(scope); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         let events = match self.0.register() { |         let mut events = match self.0.register() { | ||||||
|             Reg::Read => EventSet::readable(), |             Reg::Read => EventSet::readable(), | ||||||
|             Reg::Write => EventSet::writable(), |             Reg::Write => EventSet::writable(), | ||||||
|             Reg::ReadWrite => EventSet::readable() | EventSet::writable(), |             Reg::ReadWrite => EventSet::readable() | EventSet::writable(), | ||||||
| @@ -610,6 +617,8 @@ impl<K: Key, T: Transport, H: MessageHandler<T>> Conn<K, T, H> { | |||||||
|             return ReadyResult::Continue(self); |             return ReadyResult::Continue(self); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         events = events | EventSet::hup(); | ||||||
|  |  | ||||||
|         trace!("scope.reregister({:?})", events); |         trace!("scope.reregister({:?})", events); | ||||||
|         match scope.reregister(&self.0.transport, events, PollOpt::level()) { |         match scope.reregister(&self.0.transport, events, PollOpt::level()) { | ||||||
|             Ok(..) => { |             Ok(..) => { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user