From 0e64d71196ab865ce50505c7ba13a5d400b3aafe Mon Sep 17 00:00:00 2001 From: Max Inden Date: Tue, 12 Sep 2023 05:03:38 +0200 Subject: [PATCH] fix(server): filter out `/quic` in favor of `/quic-v1` Configuration files generated by Kubo <= v0.22 list both `/quic` and `/quic-v1` listen addresses with the same UDP port. Given that we enable draft-29, the two addresses are treated the same by rust-libp2p's QUIC implementation. Though calling `listen_on` with both results in an "Address already in use" error by the OS on the second call. To prevent this from happening filter out `/quic` addresses in favor of `/quic-v1`. Pull-Request: #4467. --- misc/server/CHANGELOG.md | 8 ++++++++ misc/server/src/main.rs | 7 ++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/misc/server/CHANGELOG.md b/misc/server/CHANGELOG.md index d7c8f71d..571d52c5 100644 --- a/misc/server/CHANGELOG.md +++ b/misc/server/CHANGELOG.md @@ -8,6 +8,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Add libp2p-lookup to Dockerfile to enable healthchecks. +### Fixed + +- Disable QUIC `draft-29` support. + Listening on `/quic` and `/quic-v1` addresses with the same port would otherwise result in an "Address already in use" error by the OS. + See [PR 4467]. + +[PR 4467]: https://github.com/libp2p/rust-libp2p/pull/4467 + ## [0.12.2] ### Fixed - Adhere to `--metrics-path` flag and listen on `0.0.0.0:8888` (default IPFS metrics port). diff --git a/misc/server/src/main.rs b/misc/server/src/main.rs index 67abb5b2..e5c74a81 100644 --- a/misc/server/src/main.rs +++ b/misc/server/src/main.rs @@ -89,11 +89,7 @@ async fn main() -> Result<(), Box> { .multiplex(yamux::Config::default()) .timeout(Duration::from_secs(20)); - let quic_transport = { - let mut config = quic::Config::new(&local_keypair); - config.support_draft_29 = true; - quic::tokio::Transport::new(config) - }; + let quic_transport = quic::tokio::Transport::new(quic::Config::new(&local_keypair)); dns::TokioDnsConfig::system(libp2p::core::transport::OrTransport::new( quic_transport, @@ -126,6 +122,7 @@ async fn main() -> Result<(), Box> { Err(e) => return Err(e.into()), } } + if config.addresses.append_announce.is_empty() { warn!("No external addresses configured."); }