diff --git a/src/ringdht/p2p.cpp b/src/ringdht/p2p.cpp
index 9d09b05145f4c42027612ba8a564cd9ad89201e0..2180a3214d3ab40645a6ad8bf7e186010b8eb0d7 100644
--- a/src/ringdht/p2p.cpp
+++ b/src/ringdht/p2p.cpp
@@ -425,11 +425,16 @@ DhtPeerConnector::Impl::turnConnect()
     if (turnAuthv6_ && !turnAuthv6_->isReady())
         turnAuthv6_.release();
 
-    turn_param_v4.authorized_family = PJ_AF_INET;
-    turnAuthv4_ = std::make_unique<TurnTransport>(turn_param_v4);
-    auto turn_param_v6 = turn_param_v4;
-    turn_param_v6.authorized_family = PJ_AF_INET6;
-    turnAuthv6_ = std::make_unique<TurnTransport>(turn_param_v6);
+    if (!turnAuthv4_ || !turnAuthv4_->isReady()) {
+        turn_param_v4.authorized_family = PJ_AF_INET;
+        turnAuthv4_ = std::make_unique<TurnTransport>(turn_param_v4);
+    }
+
+    if (!turnAuthv6_ || !turnAuthv6_->isReady()) {
+        auto turn_param_v6 = turn_param_v4;
+        turn_param_v6.authorized_family = PJ_AF_INET6;
+        turnAuthv6_ = std::make_unique<TurnTransport>(turn_param_v6);
+    }
 
     // Wait until TURN server READY state (or timeout)
     Timeout<Clock> timeout {NET_CONNECTION_TIMEOUT};