Index: trunk/BNC/CHANGELOG.md
===================================================================
--- trunk/BNC/CHANGELOG.md	(revision 10959)
+++ trunk/BNC/CHANGELOG.md	(revision 10960)
@@ -10,4 +10,5 @@
 - FIXED: Handling of ionospheric constraints [(#220)](https://software.rtcm-ntrip.org/ticket/220)
 - FIXED: SP3/Clock RINEX clock values produced by the Upload Corrections feature no longer depend on whether 'Center of Mass' is ticked, since that setting should only affect the uploaded SSR Broadcast Correction stream [(#210)](https://software.rtcm-ntrip.org/ticket/210)
+- FIXED: A timeout is added to allow a reonnect after an outage of Ntrip Version 2/2s streams
 - CHANGED: prevention to extrapolate a orb/clk SSR correction far beyond its own declared update interval 
 - CHANGED: GLONASS postion integration fresh from the pristine, decoded TOC state rather than rolling _tt/_xv forward across repeated calls
Index: trunk/BNC/src/bncnetqueryv2.cpp
===================================================================
--- trunk/BNC/src/bncnetqueryv2.cpp	(revision 10959)
+++ trunk/BNC/src/bncnetqueryv2.cpp	(revision 10960)
@@ -16,4 +16,6 @@
 
 #include <iostream>
+
+#include <QTimer>
 
 #include "bncnetqueryv2.h"
@@ -34,4 +36,5 @@
   _firstData = true;
   _status    = init;
+  _timeOut   = 20000;
 
   bncSettings settings;
@@ -215,8 +218,26 @@
   // Wait Loop
   // ---------
+  bool timedOut = false;
   if (!_reply->bytesAvailable()) {
+    QTimer timer;
+    timer.setSingleShot(true);
+    connect(&timer, SIGNAL(timeout()), _eventLoop, SLOT(quit()));
+    timer.start(_timeOut);
     _eventLoop->exec();
+    timedOut = !timer.isActive();
   }
   if (!_reply) {
+    return;
+  }
+
+  // Timeout: neither new data arrived nor did the request finish
+  // (e.g. connection silently dropped by a NAT/firewall)
+  // --------------------------------------------------------------
+  if (timedOut) {
+    _status = error;
+    emit newMessage(_url.path().toLatin1().replace(0,1,"")
+                    + ": Read timeout", true);
+    disconnect(_reply, SIGNAL(finished()), this, SLOT(slotFinished()));
+    _reply->abort();
     return;
   }
