From 9c3bc8b24a42d09577c136128b09ce768c08d507 Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Thu, 1 Oct 2015 14:39:27 +0000
Subject: [PATCH] Task #8444: Let getSocketPort return 0 instead of -1 if port
 could not be determined. This makes code a bit easier.

---
 LCS/Stream/src/NetFuncs.cc     | 4 ++--
 LCS/Stream/src/NetFuncs.h      | 2 +-
 LCS/Stream/src/SocketStream.cc | 7 ++-----
 3 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/LCS/Stream/src/NetFuncs.cc b/LCS/Stream/src/NetFuncs.cc
index 0df3eaaa7d7..d0c6179a188 100644
--- a/LCS/Stream/src/NetFuncs.cc
+++ b/LCS/Stream/src/NetFuncs.cc
@@ -115,10 +115,10 @@ namespace LOFAR {
       THROW_SYSCALL("getsockname");
 
     if (sin.sin_family != AF_INET)
-      return -1;
+      return 0;
 
     if (addrlen != sizeof sin)
-      return -1;
+      return 0;
 
     return ntohs(sin.sin_port);
   }
diff --git a/LCS/Stream/src/NetFuncs.h b/LCS/Stream/src/NetFuncs.h
index 1199c4cd04e..5c5aa59dee4 100644
--- a/LCS/Stream/src/NetFuncs.h
+++ b/LCS/Stream/src/NetFuncs.h
@@ -44,7 +44,7 @@ namespace LOFAR {
   // Retrieve the IP of an interface ("eth0") as an 'ifreq' struct, which can be used as sockaddr.
   struct sockaddr getInterfaceIP(const std::string &iface);
 
-  // Returns the TCP/UDP port number allocated to a socket
+  // Returns the TCP/UDP port number allocated to a socket, or 0 if unknown.
   int getSocketPort(int fd);
 }
 
diff --git a/LCS/Stream/src/SocketStream.cc b/LCS/Stream/src/SocketStream.cc
index 17828f9e7a3..eacf2dd1560 100644
--- a/LCS/Stream/src/SocketStream.cc
+++ b/LCS/Stream/src/SocketStream.cc
@@ -139,12 +139,9 @@ SocketStream::SocketStream(const std::string &hostname, uint16 _port, Protocol p
 
         if (port == 0) {
           // we let OS search for a free port
-          int actual_port = getSocketPort(fd);
+          port = getSocketPort(fd);
 
-          LOG_DEBUG(str(boost::format("Bound socket %s to port %s") % description % actual_port));
-
-          // we can't accept -1
-          if (actual_port >= 0) port = actual_port;
+          LOG_DEBUG(str(boost::format("Bound socket %s to port %s") % description % port));
         }
 
         if (protocol == TCP) {
-- 
GitLab