Index: trunk/BNS/bns.cpp
===================================================================
--- trunk/BNS/bns.cpp	(revision 857)
+++ trunk/BNS/bns.cpp	(revision 858)
@@ -15,4 +15,5 @@
  * -----------------------------------------------------------------------*/
 
+#include <math.h>
 #include <iostream>
 #include <newmatio.h>
@@ -54,5 +55,6 @@
   // Socket and file for outputting the results
   // -------------------------------------------
-  _outSocket = 0;
+  _outSocket          = 0;
+  _outSocketOpenTrial = 0;
 
   QString outFileName = settings.value("outFile").toString();
@@ -173,8 +175,20 @@
 ////////////////////////////////////////////////////////////////////////////
 void t_bns::openCaster() {
-  
+
+  delete _outSocket; _outSocket = 0;
+
+  double minDt = exp2(_outSocketOpenTrial);
+  if (++_outSocketOpenTrial > 8) {
+    _outSocketOpenTrial = 8;
+  }
+  if (_outSocketOpenTime.isValid() &&
+      _outSocketOpenTime.secsTo(QDateTime::currentDateTime()) < minDt) {
+    return;
+  }
+  else {
+    _outSocketOpenTime = QDateTime::currentDateTime();
+  }
+
   QSettings settings;
-
-  delete _outSocket;
   _outSocket = new QTcpSocket();
   _outSocket->connectToHost(settings.value("outHost").toString(),
@@ -209,4 +223,5 @@
   else {
     slotMessage("bns::openCaster socket OK");
+    _outSocketOpenTrial = 0;
   }
 }
Index: trunk/BNS/bns.h
===================================================================
--- trunk/BNS/bns.h	(revision 857)
+++ trunk/BNS/bns.h	(revision 858)
@@ -57,4 +57,6 @@
   QTcpSocket*               _clkSocket;
   QTcpSocket*               _outSocket;
+  int                       _outSocketOpenTrial;
+  QDateTime                 _outSocketOpenTime;
   QFile*                    _outFile;
   QFile*                    _logFile;
Index: trunk/BNS/bnsrinex.cpp
===================================================================
--- trunk/BNS/bnsrinex.cpp	(revision 857)
+++ trunk/BNS/bnsrinex.cpp	(revision 858)
@@ -35,10 +35,4 @@
 }
 
-// Write Header
-////////////////////////////////////////////////////////////////////////////
-void bnsRinex::writeHeader(const QDateTime& datTim) {
-  _out << "THIS IS A DUMMY CLOCK RINEX HEADER" << endl;
-}
-
 // Write One Epoch
 ////////////////////////////////////////////////////////////////////////////
@@ -63,2 +57,21 @@
   }
 }
+
+// Write Header
+////////////////////////////////////////////////////////////////////////////
+void bnsRinex::writeHeader(const QDateTime& datTim) {
+
+  _out << "     3.00           C                                       "
+       << "RINEX VERSION / TYPE" << endl;
+
+  _out << "BNS                                     " 
+       << datTim.toString("yyyyMMdd hhmmss").leftJustified(20, ' ', true).toAscii().data()
+       << "PGM / RUN BY / DATE" << endl;
+
+  _out << "     1    AS                                                "
+       << "# / TYPES OF DATA" << endl;
+
+  _out << "                                                            "
+       << "END OF HEADER" << endl;
+}
+
