Proper shutdown functionality for Thrift servers

Reviewed By: karl


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665038 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cpp/src/server/TSimpleServer.cpp b/lib/cpp/src/server/TSimpleServer.cpp
index eb936f5..8657fab 100644
--- a/lib/cpp/src/server/TSimpleServer.cpp
+++ b/lib/cpp/src/server/TSimpleServer.cpp
@@ -34,7 +34,7 @@
   }
 
   // Fetch client from server
-  while (true) {
+  while (!stop_) {
     try {
       client = serverTransport_->accept();
       inputTransport = inputTransportFactory_->getTransport(client);
@@ -77,7 +77,14 @@
     }
   }
 
-  // TODO(mcslee): Could this be a timeout case? Or always the real thing?
+  if (stop_) {
+    try {
+      serverTransport_->close();
+    } catch (TTransportException &ttx) {
+      cerr << "TServerTransport failed on close: " << ttx.what() << endl;
+    }
+    stop_ = false;
+  }
 }
 
 }}} // facebook::thrift::server