diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fad2008..8719d819 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ - Update individual crates. - `libp2p-relay` + - `libp2p-tcp` ## Version 0.42.0 [2022-01-27] diff --git a/Cargo.toml b/Cargo.toml index 92e5e095..53e97ea7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -106,7 +106,7 @@ smallvec = "1.6.1" libp2p-deflate = { version = "0.31.0", path = "transports/deflate", optional = true } libp2p-dns = { version = "0.31.0", path = "transports/dns", optional = true, default-features = false } libp2p-mdns = { version = "0.34.0", path = "protocols/mdns", optional = true } -libp2p-tcp = { version = "0.31.0", path = "transports/tcp", default-features = false, optional = true } +libp2p-tcp = { version = "0.31.1", path = "transports/tcp", default-features = false, optional = true } libp2p-websocket = { version = "0.33.0", path = "transports/websocket", optional = true } [dev-dependencies] diff --git a/transports/tcp/CHANGELOG.md b/transports/tcp/CHANGELOG.md index 1753e7b0..2837e88e 100644 --- a/transports/tcp/CHANGELOG.md +++ b/transports/tcp/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.31.1 [unreleased] + +- Call `TcpSocket::take_error` to report connection establishment errors early. + # 0.31.0 [2022-01-27] - Update dependencies. diff --git a/transports/tcp/Cargo.toml b/transports/tcp/Cargo.toml index 002faee5..a421907c 100644 --- a/transports/tcp/Cargo.toml +++ b/transports/tcp/Cargo.toml @@ -3,7 +3,7 @@ name = "libp2p-tcp" edition = "2021" rust-version = "1.56.1" description = "TCP/IP transport protocol for libp2p" -version = "0.31.0" +version = "0.31.1" authors = ["Parity Technologies "] license = "MIT" repository = "https://github.com/libp2p/rust-libp2p" diff --git a/transports/tcp/src/lib.rs b/transports/tcp/src/lib.rs index eec52e97..99eb8f46 100644 --- a/transports/tcp/src/lib.rs +++ b/transports/tcp/src/lib.rs @@ -852,6 +852,8 @@ mod tests { panic!("No TCP port in address: {}", a) } ready_tx.send(a).await.ok(); + } + ListenerEvent::Upgrade { .. } => { return; } _ => {} diff --git a/transports/tcp/src/provider/async_io.rs b/transports/tcp/src/provider/async_io.rs index ab65544d..acbb4fbd 100644 --- a/transports/tcp/src/provider/async_io.rs +++ b/transports/tcp/src/provider/async_io.rs @@ -44,9 +44,18 @@ impl Provider for Tcp { fn new_stream(s: net::TcpStream) -> BoxFuture<'static, io::Result> { async move { + // Taken from [`Async::connect`]. + let stream = Async::new(s)?; + + // The stream becomes writable when connected. stream.writable().await?; - Ok(stream) + + // Check if there was an error while connecting. + match stream.get_ref().take_error()? { + None => Ok(stream), + Some(err) => Err(err), + } } .boxed() }