--- lib/cpp/src/server/TNonblockingServer.cpp
+++ lib/cpp/src/server/TNonblockingServer.cpp
@@ -989,8 +989,8 @@
   hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
   sprintf(port, "%d", port_);
 
-  // Wildcard address
-  error = getaddrinfo(NULL, port, &hints, &res0);
+  // Wildcard or specified address
+  error = getaddrinfo(host_ == "" || host_ =="*"? NULL : host_.c_str(), port, &hints, &res0);
   if (error) {
     string errStr = "TNonblockingServer::serve() getaddrinfo " + string(gai_strerror(error));
     GlobalOutput(errStr.c_str());

--- lib/cpp/src/server/TNonblockingServer.h
+++ lib/cpp/src/server/TNonblockingServer.h
@@ -126,6 +126,9 @@
   /// Server socket file descriptor
   int serverSocket_;
 
+  /// Host server runs on
+  std::string host_;
+
   /// Port server runs on
   int port_;
 
@@ -294,11 +297,13 @@
   TNonblockingServer(
       const boost::shared_ptr<Processor>& processor,
       const boost::shared_ptr<TProtocolFactory>& protocolFactory,
+      const std::string host,
       int port,
       const boost::shared_ptr<ThreadManager>& threadManager =
         boost::shared_ptr<ThreadManager>(),
       THRIFT_OVERLOAD_IF(Processor, TProcessor)) :
-    TServer(processor) {
+    TServer(processor),
+    host_(host) {
 
     init(port);
 
