happy_eyeballs: don't retain errored connects

This commit is contained in:
Astro 2017-07-19 01:32:53 +02:00
parent 7b7f2866fc
commit 8850c95155
2 changed files with 23 additions and 9 deletions

View file

@ -80,15 +80,29 @@ impl Future for Connecter {
return Err(format!("{}", e)),
}
for mut connect in self.connects.values_mut() {
match connect.poll() {
Ok(Async::NotReady) => (),
Ok(Async::Ready(tcp_stream)) =>
// Success!
return Ok(Async::Ready(tcp_stream)),
Err(e) =>
println!("{}", e),
let mut connected_stream = None;
self.connects.retain(|_, connect| {
if connected_stream.is_some() {
return false;
}
match connect.poll() {
Ok(Async::NotReady) => true,
Ok(Async::Ready(tcp_stream)) => {
// Success!
connected_stream = Some(tcp_stream);
false
},
Err(e) => {
println!("{}", e);
false
},
}
});
match connected_stream {
Some(tcp_stream) =>
return Ok(Async::Ready(tcp_stream)),
None => (),
}
if self.lookup.is_none() &&

View file

@ -89,7 +89,7 @@ impl<S: AsyncRead + AsyncWrite> Future for StreamStart<S> {
} else {
(StreamStartState::RecvFeatures(stream, stream_ns), Ok(Async::NotReady))
},
Ok(Async::Ready(item)) =>
Ok(Async::Ready(_)) =>
(StreamStartState::RecvFeatures(stream, stream_ns), Ok(Async::NotReady)),
Ok(Async::NotReady) =>
(StreamStartState::RecvFeatures(stream, stream_ns), Ok(Async::NotReady)),