Repository: kudu
Updated Branches:
  refs/heads/master 8c744afa9 -> af8bb879c


KUDU-2492: Make the use of SO_REUSEPORT conditional on it being defined

A recent commit to Kudu, "rpc: add experimental rpc_reuseport flag",
added the use of the rpc flag SO_REUSEREPORT. This flag is not
available with older versions of Linux, resulting in a compiler error.

This patch avoids the compiler error with a macro that checks if
SO_REUSEPORT is defined, and if it's not attempting to set it will
return an error.

Change-Id: I673fa09619955de162e2e2742480672b1e5c4d1d
Reviewed-on: http://gerrit.cloudera.org:8080/10875
Reviewed-by: Dan Burkert <danburk...@apache.org>
Tested-by: Kudu Jenkins


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/af8bb879
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/af8bb879
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/af8bb879

Branch: refs/heads/master
Commit: af8bb879c0a2dd7cd228fad055cd20e14f783842
Parents: 8c744af
Author: Thomas Tauber-Marshall <tmarsh...@cloudera.com>
Authored: Thu Jul 5 11:45:00 2018 -0700
Committer: Dan Burkert <danburk...@apache.org>
Committed: Fri Jul 6 23:09:27 2018 +0000

----------------------------------------------------------------------
 src/kudu/util/net/socket.cc | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/af8bb879/src/kudu/util/net/socket.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/net/socket.cc b/src/kudu/util/net/socket.cc
index cc14702..bc3b525 100644
--- a/src/kudu/util/net/socket.cc
+++ b/src/kudu/util/net/socket.cc
@@ -245,10 +245,14 @@ Status Socket::SetReuseAddr(bool flag) {
 }
 
 Status Socket::SetReusePort(bool flag) {
-  int int_flag = flag ? 1 : 0;
-  RETURN_NOT_OK_PREPEND(SetSockOpt(SOL_SOCKET, SO_REUSEPORT, int_flag),
-                        "failed to set SO_REUSEPORT");
-  return Status::OK();
+  #ifdef SO_REUSEPORT
+    int int_flag = flag ? 1 : 0;
+    RETURN_NOT_OK_PREPEND(SetSockOpt(SOL_SOCKET, SO_REUSEPORT, int_flag),
+                          "failed to set SO_REUSEPORT");
+    return Status::OK();
+  #else
+    return Status::NotSupported("failed to set SO_REUSEPORT: protocol not 
available");
+  #endif
 }
 
 Status Socket::BindAndListen(const Sockaddr &sockaddr,

Reply via email to