diff --git a/lib/cpp/src/thrift/server/TNonblockingServer.cpp b/lib/cpp/src/thrift/server/TNonblockingServer.cpp
index dcc90e2..c556d96 100644
--- a/lib/cpp/src/thrift/server/TNonblockingServer.cpp
+++ b/lib/cpp/src/thrift/server/TNonblockingServer.cpp
@@ -1206,7 +1206,7 @@
 
   for (uint32_t id = 0; id < numIOThreads_; ++id) {
     // the first IO thread also does the listening on server socket
-    THRIFT_SOCKET listenFd = (id == 0 ? serverSocket_ : -1);
+    THRIFT_SOCKET listenFd = (id == 0 ? serverSocket_ : THRIFT_INVALID_SOCKET);
 
     shared_ptr<TNonblockingIOThread> thread(
       new TNonblockingIOThread(this, id, listenFd, useHighPriorityIOThreads_));
@@ -1298,7 +1298,7 @@
       GlobalOutput.perror("TNonblockingIOThread listenSocket_ close(): ",
                           THRIFT_GET_SOCKET_ERROR);
     }
-    listenSocket_ = TNonblockingServer::INVALID_SOCKET_VALUE;
+    listenSocket_ = THRIFT_INVALID_SOCKET;
   }
 
   for (int i = 0; i < 2; ++i) {
@@ -1307,7 +1307,7 @@
         GlobalOutput.perror("TNonblockingIOThread notificationPipe close(): ",
                             THRIFT_GET_SOCKET_ERROR);
       }
-      notificationPipeFDs_[i] = TNonblockingServer::INVALID_SOCKET_VALUE;
+      notificationPipeFDs_[i] = THRIFT_INVALID_SOCKET;
     }
   }
 }
diff --git a/lib/cpp/src/thrift/server/TNonblockingServer.h b/lib/cpp/src/thrift/server/TNonblockingServer.h
index 585aa79..532d4ae 100644
--- a/lib/cpp/src/thrift/server/TNonblockingServer.h
+++ b/lib/cpp/src/thrift/server/TNonblockingServer.h
@@ -145,9 +145,6 @@
   /// # of IO threads to use by default
   static const int DEFAULT_IO_THREADS = 1;
 
-  /// File descriptor of an invalid socket
-  static const THRIFT_SOCKET INVALID_SOCKET_VALUE = -1;
-
   /// # of IO threads this server will use
   size_t numIOThreads_;
 
@@ -277,7 +274,7 @@
   void handleEvent(THRIFT_SOCKET fd, short which);
 
   void init(int port) {
-    serverSocket_ = -1;
+    serverSocket_ = THRIFT_INVALID_SOCKET;
     numIOThreads_ = DEFAULT_IO_THREADS;
     nextIOThread_ = 0;
     useHighPriorityIOThreads_ = false;
diff --git a/lib/cpp/src/thrift/transport/PlatformSocket.h b/lib/cpp/src/thrift/transport/PlatformSocket.h
index 40a4246..58d68a4 100644
--- a/lib/cpp/src/thrift/transport/PlatformSocket.h
+++ b/lib/cpp/src/thrift/transport/PlatformSocket.h
@@ -32,6 +32,7 @@
 #  define THRIFT_EPIPE WSAECONNRESET
 #  define THRIFT_NO_SOCKET_CACHING SO_EXCLUSIVEADDRUSE
 #  define THRIFT_SOCKET SOCKET
+#  define THRIFT_INVALID_SOCKET INVALID_SOCKET
 #  define THRIFT_SOCKETPAIR thrift_socketpair
 #  define THRIFT_FCNTL thrift_fcntl
 #  define THRIFT_O_NONBLOCK 1
@@ -70,6 +71,7 @@
 #  define THRIFT_EPIPE       EPIPE
 #  define THRIFT_NO_SOCKET_CACHING SO_REUSEADDR
 #  define THRIFT_SOCKET int
+#  define THRIFT_INVALID_SOCKET (-1)
 #  define THRIFT_SOCKETPAIR socketpair
 #  define THRIFT_FCNTL fcntl
 #  define THRIFT_O_NONBLOCK O_NONBLOCK
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.cpp b/lib/cpp/src/thrift/transport/TServerSocket.cpp
index dc3cb58..4cecc3b 100644
--- a/lib/cpp/src/thrift/transport/TServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp
@@ -76,7 +76,7 @@
 
 TServerSocket::TServerSocket(int port) :
   port_(port),
-  serverSocket_(-1),
+  serverSocket_(THRIFT_INVALID_SOCKET),
   acceptBacklog_(DEFAULT_BACKLOG),
   sendTimeout_(0),
   recvTimeout_(0),
@@ -85,12 +85,12 @@
   retryDelay_(0),
   tcpSendBuffer_(0),
   tcpRecvBuffer_(0),
-  intSock1_(-1),
-  intSock2_(-1) {}
+  intSock1_(THRIFT_INVALID_SOCKET),
+  intSock2_(THRIFT_INVALID_SOCKET) {}
 
 TServerSocket::TServerSocket(int port, int sendTimeout, int recvTimeout) :
   port_(port),
-  serverSocket_(-1),
+  serverSocket_(THRIFT_INVALID_SOCKET),
   acceptBacklog_(DEFAULT_BACKLOG),
   sendTimeout_(sendTimeout),
   recvTimeout_(recvTimeout),
@@ -99,13 +99,13 @@
   retryDelay_(0),
   tcpSendBuffer_(0),
   tcpRecvBuffer_(0),
-  intSock1_(-1),
-  intSock2_(-1) {}
+  intSock1_(THRIFT_INVALID_SOCKET),
+  intSock2_(THRIFT_INVALID_SOCKET) {}
 
 TServerSocket::TServerSocket(string path) :
   port_(0),
   path_(path),
-  serverSocket_(-1),
+  serverSocket_(THRIFT_INVALID_SOCKET),
   acceptBacklog_(DEFAULT_BACKLOG),
   sendTimeout_(0),
   recvTimeout_(0),
@@ -114,8 +114,8 @@
   retryDelay_(0),
   tcpSendBuffer_(0),
   tcpRecvBuffer_(0),
-  intSock1_(-1),
-  intSock2_(-1) {}
+  intSock1_(THRIFT_INVALID_SOCKET),
+  intSock2_(THRIFT_INVALID_SOCKET) {}
 
 TServerSocket::~TServerSocket() {
   close();
@@ -157,8 +157,8 @@
   THRIFT_SOCKET sv[2];
   if (-1 == THRIFT_SOCKETPAIR(AF_LOCAL, SOCK_STREAM, 0, sv)) {
     GlobalOutput.perror("TServerSocket::listen() socketpair() ", THRIFT_GET_SOCKET_ERROR);
-    intSock1_ = -1;
-    intSock2_ = -1;
+    intSock1_ = THRIFT_INVALID_SOCKET;
+    intSock2_ = THRIFT_INVALID_SOCKET;
   } else {
     intSock1_ = sv[1];
     intSock2_ = sv[0];
@@ -194,7 +194,7 @@
     serverSocket_ = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
   }
 
-  if (serverSocket_ == -1) {
+  if (serverSocket_ == THRIFT_INVALID_SOCKET) {
     int errno_copy = THRIFT_GET_SOCKET_ERROR;
     GlobalOutput.perror("TServerSocket::listen() socket() ", errno_copy);
     close();
@@ -366,7 +366,7 @@
 }
 
 shared_ptr<TTransport> TServerSocket::acceptImpl() {
-  if (serverSocket_ == -1) {
+  if (serverSocket_ == THRIFT_INVALID_SOCKET) {
     throw TTransportException(TTransportException::NOT_OPEN, "TServerSocket not listening");
   }
 
@@ -379,7 +379,7 @@
     std::memset(fds, 0 , sizeof(fds));
     fds[0].fd = serverSocket_;
     fds[0].events = THRIFT_POLLIN;
-    if (intSock2_ != -1) {
+    if (intSock2_ != THRIFT_INVALID_SOCKET) {
       fds[1].fd = intSock2_;
       fds[1].events = THRIFT_POLLIN;
     }
@@ -401,7 +401,8 @@
       throw TTransportException(TTransportException::UNKNOWN, "Unknown", errno_copy);
     } else if (ret > 0) {
       // Check for an interrupt signal
-      if (intSock2_ != -1 && (fds[1].revents & THRIFT_POLLIN)) {
+      if (intSock2_ != THRIFT_INVALID_SOCKET
+          && (fds[1].revents & THRIFT_POLLIN)) {
         int8_t buf;
         if (-1 == recv(intSock2_, cast_sockopt(&buf), sizeof(int8_t), 0)) {
           GlobalOutput.perror("TServerSocket::acceptImpl() recv() interrupt ", THRIFT_GET_SOCKET_ERROR);
@@ -462,7 +463,7 @@
 }
 
 void TServerSocket::interrupt() {
-  if (intSock1_ != -1) {
+  if (intSock1_ != THRIFT_INVALID_SOCKET) {
     int8_t byte = 0;
     if (-1 == send(intSock1_, cast_sockopt(&byte), sizeof(int8_t), 0)) {
       GlobalOutput.perror("TServerSocket::interrupt() send() ", THRIFT_GET_SOCKET_ERROR);
@@ -471,19 +472,19 @@
 }
 
 void TServerSocket::close() {
-  if (serverSocket_ != -1) {
+  if (serverSocket_ != THRIFT_INVALID_SOCKET) {
     shutdown(serverSocket_, THRIFT_SHUT_RDWR);
     ::THRIFT_CLOSESOCKET(serverSocket_);
   }
-  if (intSock1_ != -1) {
+  if (intSock1_ != THRIFT_INVALID_SOCKET) {
       ::THRIFT_CLOSESOCKET(intSock1_);
   }
-  if (intSock2_ != -1) {
+  if (intSock2_ != THRIFT_INVALID_SOCKET) {
     ::THRIFT_CLOSESOCKET(intSock2_);
   }
-  serverSocket_ = -1;
-  intSock1_ = -1;
-  intSock2_ = -1;
+  serverSocket_ = THRIFT_INVALID_SOCKET;
+  intSock1_ = THRIFT_INVALID_SOCKET;
+  intSock2_ = THRIFT_INVALID_SOCKET;
 }
 
 }}} // apache::thrift::transport
diff --git a/lib/cpp/src/thrift/transport/TSocket.cpp b/lib/cpp/src/thrift/transport/TSocket.cpp
index a9a752c..d521bb5 100644
--- a/lib/cpp/src/thrift/transport/TSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TSocket.cpp
@@ -79,7 +79,7 @@
   host_(host),
   port_(port),
   path_(""),
-  socket_(-1),
+  socket_(THRIFT_INVALID_SOCKET),
   connTimeout_(0),
   sendTimeout_(0),
   recvTimeout_(0),
@@ -95,7 +95,7 @@
   host_(""),
   port_(0),
   path_(path),
-  socket_(-1),
+  socket_(THRIFT_INVALID_SOCKET),
   connTimeout_(0),
   sendTimeout_(0),
   recvTimeout_(0),
@@ -112,7 +112,7 @@
   host_(""),
   port_(0),
   path_(""),
-  socket_(-1),
+  socket_(THRIFT_INVALID_SOCKET),
   connTimeout_(0),
   sendTimeout_(0),
   recvTimeout_(0),
@@ -147,7 +147,7 @@
 }
 
 bool TSocket::isOpen() {
-  return (socket_ != -1);
+  return (socket_ != THRIFT_INVALID_SOCKET);
 }
 
 bool TSocket::peek() {
@@ -187,7 +187,7 @@
     socket_ = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
   }
 
-  if (socket_ == -1) {
+  if (socket_ == THRIFT_INVALID_SOCKET) {
     int errno_copy = THRIFT_GET_SOCKET_ERROR;
     GlobalOutput.perror("TSocket::open() socket() " + getSocketInfo(), errno_copy);
     throw TTransportException(TTransportException::NOT_OPEN, "socket()", errno_copy);
@@ -394,22 +394,22 @@
 }
 
 void TSocket::close() {
-  if (socket_ != -1) {
+  if (socket_ != THRIFT_INVALID_SOCKET) {
     shutdown(socket_, THRIFT_SHUT_RDWR);
     ::THRIFT_CLOSESOCKET(socket_);
   }
-  socket_ = -1;
+  socket_ = THRIFT_INVALID_SOCKET;
 }
 
 void TSocket::setSocketFD(THRIFT_SOCKET socket) {
-  if (socket_ != -1) {
+  if (socket_ != THRIFT_INVALID_SOCKET) {
     close();
   }
   socket_ = socket;
 }
 
 uint32_t TSocket::read(uint8_t* buf, uint32_t len) {
-  if (socket_ == -1) {
+  if (socket_ == THRIFT_INVALID_SOCKET) {
     throw TTransportException(TTransportException::NOT_OPEN, "Called read on non-open socket");
   }
 
@@ -541,7 +541,7 @@
 }
 
 uint32_t TSocket::write_partial(const uint8_t* buf, uint32_t len) {
-  if (socket_ == -1) {
+  if (socket_ == THRIFT_INVALID_SOCKET) {
     throw TTransportException(TTransportException::NOT_OPEN, "Called write on non-open socket");
   }
 
@@ -599,7 +599,7 @@
 void TSocket::setLinger(bool on, int linger) {
   lingerOn_ = on;
   lingerVal_ = linger;
-  if (socket_ == -1) {
+  if (socket_ == THRIFT_INVALID_SOCKET) {
     return;
   }
 
@@ -613,7 +613,7 @@
 
 void TSocket::setNoDelay(bool noDelay) {
   noDelay_ = noDelay;
-  if (socket_ == -1 || !path_.empty()) {
+  if (socket_ == THRIFT_INVALID_SOCKET || !path_.empty()) {
     return;
   }
 
@@ -639,7 +639,7 @@
   }
   recvTimeout_ = ms;
 
-  if (socket_ == -1) {
+  if (socket_ == THRIFT_INVALID_SOCKET) {
     return;
   }
 
@@ -664,7 +664,7 @@
   }
   sendTimeout_ = ms;
 
-  if (socket_ == -1) {
+  if (socket_ == THRIFT_INVALID_SOCKET) {
     return;
   }
 
@@ -698,7 +698,7 @@
     struct sockaddr* addrPtr;
     socklen_t addrLen;
 
-    if (socket_ == -1) {
+    if (socket_ == THRIFT_INVALID_SOCKET) {
       return host_;
     }
 
@@ -732,7 +732,7 @@
     struct sockaddr* addrPtr;
     socklen_t addrLen;
 
-    if (socket_ == -1) {
+    if (socket_ == THRIFT_INVALID_SOCKET) {
       return peerAddress_;
     }
 
diff --git a/lib/cpp/src/thrift/transport/TSocketPool.cpp b/lib/cpp/src/thrift/transport/TSocketPool.cpp
index c468fb3..e0b286a 100644
--- a/lib/cpp/src/thrift/transport/TSocketPool.cpp
+++ b/lib/cpp/src/thrift/transport/TSocketPool.cpp
@@ -37,7 +37,7 @@
 TSocketPoolServer::TSocketPoolServer()
   : host_(""),
     port_(0),
-    socket_(-1),
+    socket_(THRIFT_INVALID_SOCKET),
     lastFailTime_(0),
     consecutiveFailures_(0) {}
 
@@ -47,7 +47,7 @@
 TSocketPoolServer::TSocketPoolServer(const string &host, int port)
   : host_(host),
     port_(port),
-    socket_(-1),
+    socket_(THRIFT_INVALID_SOCKET),
     lastFailTime_(0),
     consecutiveFailures_(0) {}
 
@@ -178,7 +178,7 @@
 
   size_t numServers = servers_.size();
   if (numServers == 0) {
-    socket_ = -1;
+    socket_ = THRIFT_INVALID_SOCKET;
     throw TTransportException(TTransportException::NOT_OPEN);
   }
 
@@ -219,7 +219,7 @@
         } catch (TException e) {
           string errStr = "TSocketPool::open failed "+getSocketInfo()+": "+e.what();
           GlobalOutput(errStr.c_str());
-          socket_ = -1;
+          socket_ = THRIFT_INVALID_SOCKET;
           continue;
         }
 
@@ -247,7 +247,7 @@
 void TSocketPool::close() {
   TSocket::close();
   if (currentServer_) {
-    currentServer_->socket_ = -1;
+    currentServer_->socket_ = THRIFT_INVALID_SOCKET;
   }
 }
 
