You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by jo...@apache.org on 2017/10/11 22:37:06 UTC

[4/6] mesos git commit: Updated `LibeventSSLSocketImpl` for Windows file descriptors.

Updated `LibeventSSLSocketImpl` for Windows file descriptors.

This patch introduces the `int_fd` abstraction we use elsewhere to the
`LibeventSSLSocketImpl` for dealing with Linux versus Windows file
descriptors. This is necessary because on Windows, the consumer of
`LibeventSSLSocketImpl::create()` etc. already use `int_fd`.

Note that this does not break Linux systems, as `int_fd` is defined as
`int` on all non-Windows systems.

On Windows, however, in `evbuffer_add_file` we must explicitly convert
from `int_fd` (holding a Windows file handle) to a CRT `int` file
descriptor (the platform-specific call to `crt()`).

We have to correct the type expected by `evconnlistener_new` from `int`
to `evutil_socket_t`. This previously worked as just an `int` because
that is the underlying type used for sockets by libevent on Linux, but
it instead uses `intptr_t` on Windows. The `int_fd` abstraction can be
casted to `intptr_t` (and thus `evutil_socket_t`) automatically, but not
`int`, and so correcting the type to `evutil_socket_t` allows us to use
this lambda for the listener.

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


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

Branch: refs/heads/master
Commit: f06e6184b0d6cc4a3245a714e5b56f26eb454233
Parents: e76759a
Author: Andrew Schwartzmeyer <an...@schwartzmeyer.com>
Authored: Wed Oct 11 14:54:58 2017 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Wed Oct 11 14:54:58 2017 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/src/libevent_ssl_socket.cpp | 12 ++++++++----
 3rdparty/libprocess/src/libevent_ssl_socket.hpp | 10 +++++-----
 2 files changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/f06e6184/3rdparty/libprocess/src/libevent_ssl_socket.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/libevent_ssl_socket.cpp b/3rdparty/libprocess/src/libevent_ssl_socket.cpp
index 5767ce0..1c95eba 100644
--- a/3rdparty/libprocess/src/libevent_ssl_socket.cpp
+++ b/3rdparty/libprocess/src/libevent_ssl_socket.cpp
@@ -84,7 +84,7 @@ namespace process {
 namespace network {
 namespace internal {
 
-Try<std::shared_ptr<SocketImpl>> LibeventSSLSocketImpl::create(int s)
+Try<std::shared_ptr<SocketImpl>> LibeventSSLSocketImpl::create(int_fd s)
 {
   openssl::initialize();
 
@@ -476,7 +476,7 @@ void LibeventSSLSocketImpl::event_callback(short events)
 }
 
 
-LibeventSSLSocketImpl::LibeventSSLSocketImpl(int _s)
+LibeventSSLSocketImpl::LibeventSSLSocketImpl(int_fd _s)
   : SocketImpl(_s),
     bev(nullptr),
     listener(nullptr),
@@ -487,7 +487,7 @@ LibeventSSLSocketImpl::LibeventSSLSocketImpl(int _s)
 
 
 LibeventSSLSocketImpl::LibeventSSLSocketImpl(
-    int _s,
+    int_fd _s,
     bufferevent* _bev,
     Option<string>&& _peer_hostname)
   : SocketImpl(_s),
@@ -855,7 +855,11 @@ Future<size_t> LibeventSSLSocketImpl::sendfile(
           // descriptor and close it after it has finished reading it.
           int result = evbuffer_add_file(
               bufferevent_get_output(self->bev),
+#ifdef __WINDOWS__
+              owned_fd.crt(),
+#else
               owned_fd,
+#endif // __WINDOWS__
               offset,
               size);
           CHECK_EQ(0, result);
@@ -883,7 +887,7 @@ Try<Nothing> LibeventSSLSocketImpl::listen(int backlog)
   listener = evconnlistener_new(
       base,
       [](evconnlistener* listener,
-         int socket,
+         evutil_socket_t socket,
          sockaddr* addr,
          int addr_length,
          void* arg) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/f06e6184/3rdparty/libprocess/src/libevent_ssl_socket.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/libevent_ssl_socket.hpp b/3rdparty/libprocess/src/libevent_ssl_socket.hpp
index 9493a50..640fa67 100644
--- a/3rdparty/libprocess/src/libevent_ssl_socket.hpp
+++ b/3rdparty/libprocess/src/libevent_ssl_socket.hpp
@@ -33,9 +33,9 @@ class LibeventSSLSocketImpl : public SocketImpl
 {
 public:
   // See 'Socket::create()'.
-  static Try<std::shared_ptr<SocketImpl>> create(int s);
+  static Try<std::shared_ptr<SocketImpl>> create(int_fd s);
 
-  LibeventSSLSocketImpl(int _s);
+  LibeventSSLSocketImpl(int_fd _s);
 
   ~LibeventSSLSocketImpl() override;
 
@@ -71,7 +71,7 @@ private:
   struct AcceptRequest
   {
     AcceptRequest(
-        int _socket,
+        int_fd _socket,
         evconnlistener* _listener,
         const Option<net::IP>& _ip)
       : peek_event(nullptr),
@@ -81,7 +81,7 @@ private:
     event* peek_event;
     Promise<std::shared_ptr<SocketImpl>> promise;
     evconnlistener* listener;
-    int socket;
+    int_fd socket;
     Option<net::IP> ip;
   };
 
@@ -110,7 +110,7 @@ private:
   // This is a private constructor used by the accept helper
   // functions.
   LibeventSSLSocketImpl(
-      int _s,
+      int_fd _s,
       bufferevent* bev,
       Option<std::string>&& peer_hostname);