You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ti...@apache.org on 2014/11/17 21:32:30 UTC

mesos git commit: Fix compilation error for Socket on older linux + OSX.

Repository: mesos
Updated Branches:
  refs/heads/master 59215ad57 -> 4913b8697


Fix compilation error for Socket on older linux + OSX.

Test whether SOCK_NONBLOCK and SOCK_CLOEXEC are defined to use single system call to create socket.
Otherwise use os::nonblock and os::cloexec after creating the socket.

Review: https://reviews.apache.org/r/28125


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

Branch: refs/heads/master
Commit: 4913b869778d7e8eb0c15c2b4ec9b11d17077960
Parents: 59215ad
Author: Joris Van Remoortere <jo...@gmail.com>
Authored: Mon Nov 17 21:21:19 2014 +0100
Committer: Till Toenshoff <to...@me.com>
Committed: Mon Nov 17 21:21:19 2014 +0100

----------------------------------------------------------------------
 3rdparty/libprocess/include/process/socket.hpp | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/4913b869/3rdparty/libprocess/include/process/socket.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/include/process/socket.hpp b/3rdparty/libprocess/include/process/socket.hpp
index 20136ba..3f3e01c 100644
--- a/3rdparty/libprocess/include/process/socket.hpp
+++ b/3rdparty/libprocess/include/process/socket.hpp
@@ -92,11 +92,32 @@ public:
     const Impl& create() const
     {
       CHECK(s < 0);
+
+      // Supported in Linux >= 2.6.27.
+#if defined(SOCK_NONBLOCK) && defined(SOCK_CLOEXEC)
       Try<int> fd =
         process::socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
+
+      if (fd.isError()) {
+        ABORT("Failed to create socket: " + fd.error());
+      }
+#else
+      Try<int> fd = process::socket(AF_INET, SOCK_STREAM, 0);
       if (fd.isError()) {
         ABORT("Failed to create socket: " + fd.error());
       }
+
+      Try<Nothing> nonblock = os::nonblock(fd.get());
+      if (nonblock.isError()) {
+        ABORT("Failed to create socket, nonblock: " + nonblock.error());
+      }
+
+      Try<Nothing> cloexec = os::cloexec(fd.get());
+      if (cloexec.isError()) {
+        ABORT("Failed to create socket, cloexec: " + cloexec.error());
+      }
+#endif
+
       s = fd.get();
       return *this;
     }