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,