diff --git a/test/cpp/src/TestClient.cpp b/test/cpp/src/TestClient.cpp
index e709899..1ab4d21 100644
--- a/test/cpp/src/TestClient.cpp
+++ b/test/cpp/src/TestClient.cpp
@@ -125,6 +125,7 @@
   string transport_type = "buffered";
   string protocol_type = "binary";
   string domain_socket = "";
+  bool abstract_namespace = false;
   bool noinsane = false;
 
   boost::program_options::options_description desc("Allowed options");
@@ -139,6 +140,8 @@
       "domain-socket",
       boost::program_options::value<string>(&domain_socket)->default_value(domain_socket),
       "Domain Socket (e.g. /tmp/ThriftTest.thrift), instead of host and port")(
+      "abstract-namespace",
+      "Look for the domain socket in the Abstract Namespace (no connection with filesystem pathnames)")(
       "transport",
       boost::program_options::value<string>(&transport_type)->default_value(transport_type),
       "Transport: buffered, framed, http, evhttp")(
@@ -188,6 +191,10 @@
     ssl = true;
   }
 
+  if (vm.count("abstract-namespace")) {
+    abstract_namespace = true;
+  }
+
   if (vm.count("noinsane")) {
     noinsane = true;
   }
@@ -206,7 +213,13 @@
     socket = factory->createSocket(host, port);
   } else {
     if (domain_socket != "") {
-      socket = boost::shared_ptr<TSocket>(new TSocket(domain_socket));
+      if (abstract_namespace) {
+        std::string abstract_socket("\0", 1);
+        abstract_socket += domain_socket;
+        socket = boost::shared_ptr<TSocket>(new TSocket(abstract_socket));
+      } else {
+        socket = boost::shared_ptr<TSocket>(new TSocket(domain_socket));
+      }
       port = 0;
     } else {
       socket = boost::shared_ptr<TSocket>(new TSocket(host, port));
@@ -236,7 +249,11 @@
   }
 
   // Connection info
-  cout << "Connecting (" << transport_type << "/" << protocol_type << ") to: " << domain_socket;
+  cout << "Connecting (" << transport_type << "/" << protocol_type << ") to: ";
+  if (abstract_namespace) {
+    cout << '@';
+  }
+  cout << domain_socket;
   if (port != 0) {
     cout << host << ":" << port;
   }
diff --git a/test/cpp/src/TestServer.cpp b/test/cpp/src/TestServer.cpp
index 66d3bb2..51169af 100644
--- a/test/cpp/src/TestServer.cpp
+++ b/test/cpp/src/TestServer.cpp
@@ -546,6 +546,7 @@
   string protocol_type = "binary";
   string server_type = "simple";
   string domain_socket = "";
+  bool abstract_namespace = false;
   size_t workers = 4;
 
   boost::program_options::options_description desc("Allowed options");
@@ -556,6 +557,8 @@
                                boost::program_options::value<string>(&domain_socket)
                                    ->default_value(domain_socket),
                                "Unix Domain Socket (e.g. /tmp/ThriftTest.thrift)")(
+      "abstract-namespace",
+      "Create the domain socket in the Abstract Namespace (no connection with filesystem pathnames)")(
       "server-type",
       boost::program_options::value<string>(&server_type)->default_value(server_type),
       "type of server, \"simple\", \"thread-pool\", \"threaded\", or \"nonblocking\"")(
@@ -618,6 +621,10 @@
     ssl = true;
   }
 
+  if (vm.count("abstract-namespace")) {
+    abstract_namespace = true;
+  }
+
   // Dispatcher
   boost::shared_ptr<TProtocolFactory> protocolFactory;
   if (protocol_type == "json") {
@@ -653,8 +660,14 @@
     serverSocket = boost::shared_ptr<TServerSocket>(new TSSLServerSocket(port, sslSocketFactory));
   } else {
     if (domain_socket != "") {
-      unlink(domain_socket.c_str());
-      serverSocket = boost::shared_ptr<TServerSocket>(new TServerSocket(domain_socket));
+      if (abstract_namespace) {
+        std::string abstract_socket("\0", 1);
+        abstract_socket += domain_socket;
+        serverSocket = boost::shared_ptr<TServerSocket>(new TServerSocket(abstract_socket));
+      } else {
+        unlink(domain_socket.c_str());
+        serverSocket = boost::shared_ptr<TServerSocket>(new TServerSocket(domain_socket));
+      }
       port = 0;
     } else {
       serverSocket = boost::shared_ptr<TServerSocket>(new TServerSocket(port));
@@ -677,7 +690,11 @@
 
   // Server Info
   cout << "Starting \"" << server_type << "\" server (" << transport_type << "/" << protocol_type
-       << ") listen on: " << domain_socket;
+       << ") listen on: ";
+  if (abstract_namespace) {
+    cout << '@';
+  }
+  cout << domain_socket;
   if (port != 0) {
     cout << port;
   }
diff --git a/test/crossrunner/run.py b/test/crossrunner/run.py
index e3300ba..ae7d366 100644
--- a/test/crossrunner/run.py
+++ b/test/crossrunner/run.py
@@ -204,7 +204,7 @@
     return port if ok else self._get_domain_port()
 
   def alloc_port(self, socket_type):
-    if socket_type == 'domain':
+    if socket_type in ('domain', 'abstract'):
       return self._get_domain_port()
     else:
       return self._get_tcp_port()
@@ -226,6 +226,8 @@
         path = domain_socket_path(port)
         if os.path.exists(path):
           os.remove(path)
+      elif socket_type == 'abstract':
+        self._dom_ports.remove(port)
       else:
         self._ports.remove(port)
     except IOError as err:
diff --git a/test/crossrunner/test.py b/test/crossrunner/test.py
index 512e664..3750ba3 100644
--- a/test/crossrunner/test.py
+++ b/test/crossrunner/test.py
@@ -60,10 +60,11 @@
       cmd[0] = abs_if_exists(cmd[0])
     return cmd
 
-  def _socket_arg(self, socket, port):
+  def _socket_args(self, socket, port):
     return {
-      'ip-ssl': '--ssl',
-      'domain': '--domain-socket=%s' % domain_socket_path(port),
+      'ip-ssl': ['--ssl'],
+      'domain': ['--domain-socket=%s' % domain_socket_path(port)],
+      'abstract': ['--abstract-namespace', '--domain-socket=%s' % domain_socket_path(port)],
     }.get(socket, None)
 
   def build_command(self, port):
@@ -71,9 +72,9 @@
     args = []
     args.append('--protocol=' + self.protocol)
     args.append('--transport=' + self.transport)
-    socket_arg = self._socket_arg(self.socket, port)
-    if socket_arg:
-      args.append(socket_arg)
+    socket_args = self._socket_args(self.socket, port)
+    if socket_args:
+      args += socket_args
     args.append('--port=%d' % port)
     if self._join_args:
       cmd.append('%s' % " ".join(args))
