diff --git a/lib/cpp/src/server/TNonblockingServer.cpp b/lib/cpp/src/server/TNonblockingServer.cpp
index c840bcc..ebe85a6 100644
--- a/lib/cpp/src/server/TNonblockingServer.cpp
+++ b/lib/cpp/src/server/TNonblockingServer.cpp
@@ -50,10 +50,12 @@
     // Signal completion back to the libevent thread via a socketpair
     int8_t b = 0;
     if (-1 == send(taskHandle_, &b, sizeof(int8_t), 0)) {
-      GlobalOutput("TNonblockingServer::Task: send");
+      string errStr = "TNonblockingServer::Task: send "  + TOutput::strerror_s(errno);
+      GlobalOutput(errStr.c_str());
     }
     if (-1 == ::close(taskHandle_)) {
-      GlobalOutput("TNonblockingServer::Task: close, possible resource leak");
+      string errStr = "TNonblockingServer::Task: close, possible resource leak "  + TOutput::strerror_s(errno);
+      GlobalOutput(errStr.c_str());
     }
   }
 
@@ -139,7 +141,8 @@
       }
 
       if (errno != ECONNRESET) {
-        GlobalOutput("TConnection::workSocket() recv -1");
+        string errStr = "TConnection::workSocket() recv -1 "  + TOutput::strerror_s(errno);
+        GlobalOutput(errStr.c_str());
       }
     }
 
@@ -175,7 +178,8 @@
         return;
       }
       if (errno != EPIPE) {
-        GlobalOutput("TConnection::workSocket() send -1");
+        string errStr = "TConnection::workSocket() send -1 "  + TOutput::strerror_s(errno);
+        GlobalOutput(errStr.c_str());
       }
       close();
       return;
@@ -221,7 +225,8 @@
       // We are setting up a Task to do this work and we will wait on it
       int sv[2];
       if (-1 == socketpair(AF_LOCAL, SOCK_STREAM, 0, sv)) {
-        GlobalOutput("TConnection::socketpair() failed");
+        string errStr = "TConnection::socketpair() failed "  + TOutput::strerror_s(errno);
+        GlobalOutput(errStr.c_str());
         // Now we will fall through to the APP_WAIT_TASK block with no response
       } else {
         // Create task and dispatch to the thread manager
@@ -519,7 +524,8 @@
     int flags;
     if ((flags = fcntl(clientSocket, F_GETFL, 0)) < 0 ||
         fcntl(clientSocket, F_SETFL, flags | O_NONBLOCK) < 0) {
-      GlobalOutput("thriftServerEventHandler: set O_NONBLOCK");
+      string errStr = "thriftServerEventHandler: set O_NONBLOCK (fcntl) "  + TOutput::strerror_s(errno);
+      GlobalOutput(errStr.c_str());
       close(clientSocket);
       return;
     }
@@ -542,7 +548,8 @@
   // Done looping accept, now we have to make sure the error is due to
   // blocking. Any other error is a problem
   if (errno != EAGAIN && errno != EWOULDBLOCK) {
-    GlobalOutput("thriftServerEventHandler: accept()");
+    string errStr = "thriftServerEventHandler: accept() "  + TOutput::strerror_s(errno);
+    GlobalOutput(errStr.c_str());
   }
 }
 
@@ -564,7 +571,8 @@
   // Wildcard address
   error = getaddrinfo(NULL, port, &hints, &res0);
   if (error) {
-    GlobalOutput("TNonblockingServer::serve() getaddrinfo");
+    string errStr = "TNonblockingServer::serve() getaddrinfo " + string(gai_strerror(error));
+    GlobalOutput(errStr.c_str());
     return;
   }
 
diff --git a/lib/cpp/src/server/TNonblockingServer.h b/lib/cpp/src/server/TNonblockingServer.h
index 89c69a0..7c6bc7f 100644
--- a/lib/cpp/src/server/TNonblockingServer.h
+++ b/lib/cpp/src/server/TNonblockingServer.h
@@ -12,6 +12,8 @@
 #include <transport/TTransportUtils.h>
 #include <concurrency/ThreadManager.h>
 #include <stack>
+#include <string>
+#include <errno.h>
 #include <cstdlib>
 #include <event.h>
 
@@ -320,7 +322,8 @@
   static void taskHandler(int fd, short /* which */, void* v) {
     assert(fd == ((TConnection*)v)->taskHandle_);
     if (-1 == ::close(((TConnection*)v)->taskHandle_)) {
-      GlobalOutput("TConnection::taskHandler close handle failed, resource leak");
+      std::string errStr = "TConnection::taskHandler close handle failed, resource leak " + TOutput::strerror_s(errno);
+      GlobalOutput(errStr.c_str());
     }
     ((TConnection*)v)->transition();
   }
