diff --git a/lib/d/src/thrift/async/libevent.d b/lib/d/src/thrift/async/libevent.d
index 812e4a7..04e0e71 100644
--- a/lib/d/src/thrift/async/libevent.d
+++ b/lib/d/src/thrift/async/libevent.d
@@ -62,7 +62,7 @@
     controlReceiveSocket_.blocking = false;
 
     // Register an event for receiving control messages.
-    controlReceiveEvent_ = event_new(eventBase_, controlReceiveSocket_.handle,
+    controlReceiveEvent_ = event_new(eventBase_, cast(evutil_socket_t)controlReceiveSocket_.handle,
       EV_READ | EV_PERSIST | EV_ET, assumeNothrow(&controlMsgReceiveCallback),
       cast(void*)this);
     event_add(controlReceiveEvent_, null);
@@ -188,7 +188,7 @@
   void addOneshotListenerImpl(Socket socket, TAsyncEventType eventType,
      const(timeval)* timeout, TSocketEventListener listener
   ) {
-    registerOneshotEvent(socket.handle, libeventEventType(eventType),
+    registerOneshotEvent(cast(evutil_socket_t)socket.handle, libeventEventType(eventType),
       assumeNothrow(&socketCallback), timeout, listener);
   }
 
diff --git a/lib/d/src/thrift/async/socket.d b/lib/d/src/thrift/async/socket.d
index a08f51d..352a822 100644
--- a/lib/d/src/thrift/async/socket.d
+++ b/lib/d/src/thrift/async/socket.d
@@ -18,7 +18,6 @@
  */
 module thrift.async.socket;
 
-import core.stdc.errno: ECONNRESET;
 import core.thread : Fiber;
 import core.time : dur, Duration;
 import std.array : empty;
@@ -33,11 +32,15 @@
 import thrift.internal.socket;
 
 version (Windows) {
-  import std.c.windows.winsock : connect;
+  import core.sys.windows.winsock2 : connect;
 } else version (Posix) {
   import core.sys.posix.sys.socket : connect;
 } else static assert(0, "Don't know connect on this platform.");
 
+version (Win32) {
+  import core.stdc.config : __c_long;
+}
+
 /**
  * Non-blocking socket implementation of the TTransport interface.
  *
@@ -148,7 +151,11 @@
           return;
         }
 
-        int errorCode = void;
+        version (Win32) {
+          __c_long errorCode = void;
+        } else {
+          int errorCode = void;
+        }
         socket_.getOption(SocketOptionLevel.SOCKET, cast(SocketOption)SO_ERROR,
           errorCode);
 
@@ -344,8 +351,8 @@
     enum SO_ERROR = 0x1007;
   } else version (FreeBSD) {
     enum SO_ERROR = 0x1007;
-  } else version (Win32) {
-    import std.c.windows.winsock : SO_ERROR;
+  } else version (Windows) {
+    import core.sys.windows.winsock2 : SO_ERROR;
   } else static assert(false, "Don't know SO_ERROR on this platform.");
 
   // This hack forces a delegate literal to be scoped, even if it is passed to
diff --git a/lib/d/src/thrift/codegen/async_client_pool.d b/lib/d/src/thrift/codegen/async_client_pool.d
index 26cb975..b51cd16 100644
--- a/lib/d/src/thrift/codegen/async_client_pool.d
+++ b/lib/d/src/thrift/codegen/async_client_pool.d
@@ -95,7 +95,7 @@
 }
 
 immutable bool delegate(Exception) defaultRpcFaultFilter;
-static this() {
+shared static this() {
   defaultRpcFaultFilter = (Exception e) {
     import thrift.protocol.base;
     import thrift.transport.base;
diff --git a/lib/d/src/thrift/internal/socket.d b/lib/d/src/thrift/internal/socket.d
index 6ca0a97..757fafa 100644
--- a/lib/d/src/thrift/internal/socket.d
+++ b/lib/d/src/thrift/internal/socket.d
@@ -34,8 +34,8 @@
   enum connresetOnPeerShutdown = false;
 }
 
-version (Win32) {
-  import std.c.windows.winsock : WSAGetLastError, WSAEINTR, WSAEWOULDBLOCK;
+version (Windows) {
+  import core.sys.windows.winsock2 : WSAGetLastError, WSAEINTR, WSAEWOULDBLOCK;
   import std.windows.syserror : sysErrorString;
 
   // These are unfortunately not defined in std.c.windows.winsock, see
@@ -60,7 +60,7 @@
  * isSocetCloseErrno(errno): returns true if errno indicates that the socket
  *   is logically in closed state now.
  */
-version (Win32) {
+version (Windows) {
   alias WSAGetLastError getSocketErrno;
   enum CONNECT_INPROGRESS_ERRNO = WSAEWOULDBLOCK;
   enum INTERRUPTED_ERRNO = WSAEINTR;
@@ -88,7 +88,7 @@
 }
 
 string socketErrnoString(uint errno) {
-  version (Win32) {
+  version (Windows) {
     return sysErrorString(errno);
   } else {
     return to!string(strerror(errno));
diff --git a/lib/d/src/thrift/server/nonblocking.d b/lib/d/src/thrift/server/nonblocking.d
index 5860c0c..f0afc1f 100644
--- a/lib/d/src/thrift/server/nonblocking.d
+++ b/lib/d/src/thrift/server/nonblocking.d
@@ -623,7 +623,7 @@
             to!string(event_get_version()), to!string(event_base_get_method(eventBase_)));
 
           // Register the event for the listening socket.
-          listenEvent_ = event_new(eventBase_, listenSocket_.handle,
+          listenEvent_ = event_new(eventBase_, cast(evutil_socket_t)listenSocket_.handle,
             EV_READ | EV_PERSIST | EV_ET,
             assumeNothrow(&TNonblockingServer.acceptConnectionsCallback),
             cast(void*)server_);
@@ -638,7 +638,7 @@
         completionReceiveSocket_ = pair[1];
 
         // Register an event for the task completion notification socket.
-        completionEvent_ = event_new(eventBase_, completionReceiveSocket_.handle,
+        completionEvent_ = event_new(eventBase_, cast(evutil_socket_t)completionReceiveSocket_.handle,
           EV_READ | EV_PERSIST | EV_ET, assumeNothrow(&completedCallback),
           cast(void*)this);
 
@@ -1212,10 +1212,10 @@
 
       if (!event_) {
         // If the event was not already allocated, do it now.
-        event_ = event_new(loop_.eventBase_, socket_.socketHandle,
+        event_ = event_new(loop_.eventBase_, cast(evutil_socket_t)socket_.socketHandle,
           eventFlags_, assumeNothrow(&workSocketCallback), cast(void*)this);
       } else {
-        event_assign(event_, loop_.eventBase_, socket_.socketHandle,
+        event_assign(event_, loop_.eventBase_, cast(evutil_socket_t)socket_.socketHandle,
           eventFlags_, assumeNothrow(&workSocketCallback), cast(void*)this);
       }
 
diff --git a/lib/d/src/thrift/transport/socket.d b/lib/d/src/thrift/transport/socket.d
index fcb38da..b257fe9 100644
--- a/lib/d/src/thrift/transport/socket.d
+++ b/lib/d/src/thrift/transport/socket.d
@@ -18,7 +18,6 @@
  */
 module thrift.transport.socket;
 
-import core.stdc.errno: ECONNRESET;
 import core.thread : Thread;
 import core.time : dur, Duration;
 import std.array : empty;
@@ -29,6 +28,13 @@
 import thrift.transport.base;
 import thrift.internal.socket;
 
+version (Windows) {
+  import core.sys.windows.winsock2 : WSAECONNRESET;
+  enum ECONNRESET = WSAECONNRESET;
+} else version (Posix) {
+  import core.stdc.errno : ECONNRESET;
+} else static assert(0, "Don't know ECONNRESET on this platform.");
+
 /**
  * Common parts of a socket TTransport implementation, regardless of how the
  * actual I/O is performed (sync/async).
diff --git a/lib/d/src/thrift/transport/ssl.d b/lib/d/src/thrift/transport/ssl.d
index f8ce40e..5bdacbf 100644
--- a/lib/d/src/thrift/transport/ssl.d
+++ b/lib/d/src/thrift/transport/ssl.d
@@ -213,7 +213,7 @@
     if (ssl_ !is null) return;
     ssl_ = context_.createSSL();
 
-    SSL_set_fd(ssl_, socketHandle);
+    SSL_set_fd(ssl_, cast(int)socketHandle);
     int rc;
     if (serverSide_) {
       rc = SSL_accept(ssl_);
