Index: /trunk/ntripserver/ntripserver.c
===================================================================
--- /trunk/ntripserver/ntripserver.c	(revision 9452)
+++ /trunk/ntripserver/ntripserver.c	(revision 9453)
@@ -138,4 +138,5 @@
 static sockettype gps_socket = INVALID_SOCKET;
 static sockettype socket_tcp = INVALID_SOCKET;
+static sockettype local_socket_tcp = INVALID_SOCKET;
 static sockettype socket_udp = INVALID_SOCKET;
 #ifndef WINDOWSVERSION
@@ -897,4 +898,14 @@
         break;
       }
+
+      if (outputmode == TCPIP) {
+        // Forcefully attaching socket to the local port
+        int opt = 1;
+        if (setsockopt(socket_tcp, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT,
+                                                      &opt, sizeof(opt)))  {
+            perror("setsockopt");
+            break;
+        }
+      }
       memset((char*) &caster, 0x00, sizeof(caster));
       memcpy(&caster.sin_addr, he->h_addr, (size_t)he->h_length);
@@ -910,9 +921,27 @@
           outputmode == RTSP   ? "rtsp"   : "tcpip");
 
-      if (connect(socket_tcp, (struct sockaddr*) &caster, sizeof(caster)) < 0) {
-        fprintf(stderr, "WARNING: can't connect output to %s at port %d",
-            inet_ntoa(caster.sin_addr), outport);
-        perror(" ");
-        break;
+      if (outputmode == TCPIP) {
+        // Forcefully attaching socket to the local port
+        if (bind(socket_tcp, (struct sockaddr *)&caster, sizeof(caster)) < 0)        {
+            perror("bind failed");
+            break;
+        }
+        if (listen(socket_tcp, 3) < 0) {
+            perror("listen");
+            break;
+        }
+        int addrlen = sizeof(caster);
+        if ((local_socket_tcp = accept(socket_tcp, (struct sockaddr *)&caster,
+                                      (socklen_t*)&addrlen)) < 0)        {
+            perror("accept");
+            break;;
+        }
+      }
+      else {
+        if (connect(socket_tcp, (struct sockaddr*) &caster, sizeof(caster)) < 0) {
+          fprintf(stderr, "WARNING: can't connect output to %s at port %d",
+              inet_ntoa(caster.sin_addr), outport);
+          break;
+        }
       }
 
@@ -1308,5 +1337,5 @@
         case TCPIP:
           fallback = 0;
-          send_receive_loop(socket_tcp, outputmode, NULL, 0, 0, chunkymode);
+          send_receive_loop(local_socket_tcp, outputmode, NULL, 0, 0, chunkymode);
           input_init = output_init = 0;
           break;
