From 22f31f816b867be826fdbea841bd76b72b465377 Mon Sep 17 00:00:00 2001 From: turuslan Date: Wed, 8 Oct 2025 16:38:43 +0500 Subject: [PATCH 1/2] disable ipv6 quic --- src/transport/quic/transport.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/transport/quic/transport.cpp b/src/transport/quic/transport.cpp index babab91..4e010c2 100644 --- a/src/transport/quic/transport.cpp +++ b/src/transport/quic/transport.cpp @@ -26,8 +26,7 @@ namespace libp2p::transport { local_peer_{id_mgr.getId()}, key_codec_{std::move(key_codec)}, resolver_{*io_context_}, - client4_{makeClient(boost::asio::ip::udp::v4())}, - client6_{makeClient(boost::asio::ip::udp::v6())} {} + client4_{makeClient(boost::asio::ip::udp::v4())} {} CoroOutcome> QuicTransport::dial(const PeerId &peer, Multiaddress address) { From 3bb49ddf03b689e12ee0ecec1a8382ebea49f29a Mon Sep 17 00:00:00 2001 From: turuslan Date: Tue, 14 Oct 2025 17:02:02 +0500 Subject: [PATCH 2/2] lazy client init, don't throw --- include/libp2p/transport/quic/transport.hpp | 2 +- src/transport/quic/transport.cpp | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/include/libp2p/transport/quic/transport.hpp b/include/libp2p/transport/quic/transport.hpp index 23575dd..1c79396 100644 --- a/include/libp2p/transport/quic/transport.hpp +++ b/include/libp2p/transport/quic/transport.hpp @@ -49,7 +49,7 @@ namespace libp2p::transport { bool canDial(const Multiaddress &ma) const override; private: - std::shared_ptr makeClient( + outcome::result> makeClient( boost::asio::ip::udp protocol) const; std::shared_ptr io_context_; diff --git a/src/transport/quic/transport.cpp b/src/transport/quic/transport.cpp index 4e010c2..0369706 100644 --- a/src/transport/quic/transport.cpp +++ b/src/transport/quic/transport.cpp @@ -25,8 +25,7 @@ namespace libp2p::transport { mux_config_{mux_config}, local_peer_{id_mgr.getId()}, key_codec_{std::move(key_codec)}, - resolver_{*io_context_}, - client4_{makeClient(boost::asio::ip::udp::v4())} {} + resolver_{*io_context_} {} CoroOutcome> QuicTransport::dial(const PeerId &peer, Multiaddress address) { @@ -49,6 +48,9 @@ namespace libp2p::transport { auto remote = results.begin()->endpoint(); auto v4 = remote.protocol() == boost::asio::ip::udp::v4(); auto &client = v4 ? client4_ : client6_; + if (client == nullptr) { + BOOST_OUTCOME_CO_TRY(client, makeClient(remote.protocol())); + } auto conn_result = co_await client->connect(remote, peer); if (!conn_result) { co_return conn_result.as_failure(); @@ -66,17 +68,20 @@ namespace libp2p::transport { return detail::asQuic(ma).has_value(); } - std::shared_ptr QuicTransport::makeClient( + outcome::result> QuicTransport::makeClient( boost::asio::ip::udp protocol) const { + boost::asio::ip::udp::socket socket{*io_context_}; + boost::system::error_code ec; + socket.open(protocol, ec); + if (ec) { + return ec; + } return std::make_shared(io_context_, ssl_context_, mux_config_, local_peer_, key_codec_, - boost::asio::ip::udp::socket{ - *io_context_, - protocol, - }, + std::move(socket), true); } } // namespace libp2p::transport