diff --git a/src/happy_eyeballs.rs b/src/happy_eyeballs.rs index f529a87a7ba0f92b69702d2d623a36b1c85750f3..3cd42f4e615d0ad47514b4e93142266ef759f844 100644 --- a/src/happy_eyeballs.rs +++ b/src/happy_eyeballs.rs @@ -80,15 +80,29 @@ impl Future for Connecter { return Err(format!("{}", e)), } - for mut connect in self.connects.values_mut() { + let mut connected_stream = None; + self.connects.retain(|_, connect| { + if connected_stream.is_some() { + return false; + } + match connect.poll() { - Ok(Async::NotReady) => (), - Ok(Async::Ready(tcp_stream)) => + Ok(Async::NotReady) => true, + Ok(Async::Ready(tcp_stream)) => { // Success! - return Ok(Async::Ready(tcp_stream)), - Err(e) => - println!("{}", e), + 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() && diff --git a/src/stream_start.rs b/src/stream_start.rs index b194b5bb4f0e7b5353524a75e9c9602d9b159ceb..4d79d4d9286cd99d74c25f36846df4bae2806734 100644 --- a/src/stream_start.rs +++ b/src/stream_start.rs @@ -89,7 +89,7 @@ impl Future for StreamStart { } 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)),