Transcever:hack: Support second independent channel by adding CLK socket to the second channel.
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index a4eda4b..b88ec87 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -148,7 +148,6 @@
                          RadioInterface *wRadioInterface,
                          double wRssiOffset)
   : mBasePort(wBasePort), mAddr(wTRXAddress),
-    mClockSocket(wBasePort, wTRXAddress, mBasePort + 100),
     mTransmitLatency(wTransmitLatency), mRadioInterface(wRadioInterface),
     rssiOffset(wRssiOffset),
     mSPSTx(wSPS), mSPSRx(1), mChans(wChans), mOn(false),
@@ -177,6 +176,7 @@
     mTxPriorityQueues[i].clear();
     delete mCtrlSockets[i];
     delete mDataSockets[i];
+    delete mClockSockets[i];
   }
 }
 
@@ -191,7 +191,7 @@
  */
 bool Transceiver::init(int filler, size_t rtsc)
 {
-  int d_srcport, d_dstport, c_srcport, c_dstport;
+  int t_srcport, t_dstport, d_srcport, d_dstport, c_srcport, c_dstport;
 
   if (!mChans) {
     LOG(ALERT) << "No channels assigned";
@@ -205,6 +205,7 @@
 
   mDataSockets.resize(mChans);
   mCtrlSockets.resize(mChans);
+  mClockSockets.resize(mChans);
   mControlServiceLoopThreads.resize(mChans);
   mTxPriorityQueueServiceLoopThreads.resize(mChans);
   mRxServiceLoopThreads.resize(mChans);
@@ -219,13 +220,16 @@
 
   /* Setup sockets */
   for (size_t i = 0; i < mChans; i++) {
-    c_srcport = mBasePort + 2 * i + 1;
-    c_dstport = mBasePort + 2 * i + 101;
-    d_srcport = mBasePort + 2 * i + 2;
-    d_dstport = mBasePort + 2 * i + 102;
+    t_srcport = mBasePort + 3 * i;
+    t_dstport = mBasePort + 3 * i + 100;
+    c_srcport = mBasePort + 3 * i + 1;
+    c_dstport = mBasePort + 3 * i + 101;
+    d_srcport = mBasePort + 3 * i + 2;
+    d_dstport = mBasePort + 3 * i + 102;
 
     mCtrlSockets[i] = new UDPSocket(c_srcport, mAddr.c_str(), c_dstport);
     mDataSockets[i] = new UDPSocket(d_srcport, mAddr.c_str(), d_dstport);
+    mClockSockets[i] = new UDPSocket(t_srcport, mAddr.c_str(), t_dstport);
   }
 
   /* Randomize the central clock */
@@ -1083,7 +1087,8 @@
 
   LOG(INFO) << "ClockInterface: sending " << command;
 
-  mClockSocket.write(command, strlen(command) + 1);
+  for (size_t i=0; i<mClockSockets.size(); i++)
+    mClockSockets[i]->write(command, strlen(command) + 1);
 
   mLastClockUpdateTime = mTransmitDeadlineClock;
 
diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h
index bd8ec4f..c981059 100644
--- a/Transceiver52M/Transceiver.h
+++ b/Transceiver52M/Transceiver.h
@@ -162,7 +162,7 @@
 
   std::vector<UDPSocket *> mDataSockets;  ///< socket for writing to/reading from GSM core
   std::vector<UDPSocket *> mCtrlSockets;  ///< socket for writing/reading control commands from GSM core
-  UDPSocket mClockSocket;                 ///< socket for writing clock updates to GSM core
+  std::vector<UDPSocket *> mClockSockets; ///< socket for writing clock updates to GSM core
 
   std::vector<VectorQueue> mTxPriorityQueues;   ///< priority queue of transmit bursts received from GSM core
   std::vector<VectorFIFO *>  mReceiveFIFO;      ///< radioInterface FIFO of receive bursts