diff --git a/lib/nodejs/lib/thrift/connection.js b/lib/nodejs/lib/thrift/connection.js
index 273339b..b545454 100644
--- a/lib/nodejs/lib/thrift/connection.js
+++ b/lib/nodejs/lib/thrift/connection.js
@@ -232,7 +232,11 @@
        return;
     }
 
-    self.connection.connect(self.port, self.host);
+    if (self.path !== undefined) {
+      self.connection.connect(self.path);
+    } else {
+      self.connection.connect(self.port, self.host);
+    }
     self.retry_timer = null;
   }, this.retry_delay);
 };
@@ -246,6 +250,14 @@
   return connection;
 };
 
+exports.createUDSConnection = function(path, options) {
+  var stream = net.createConnection(path);
+  var connection = new Connection(stream, options);
+  connection.path = path;
+
+  return connection;
+};
+
 exports.createSSLConnection = function(host, port, options) {
   if (!('secureProtocol' in options) && !('secureOptions' in options)) {
     options.secureProtocol = "SSLv23_method";
diff --git a/lib/nodejs/lib/thrift/http_connection.js b/lib/nodejs/lib/thrift/http_connection.js
index 5085538..4f5378f 100644
--- a/lib/nodejs/lib/thrift/http_connection.js
+++ b/lib/nodejs/lib/thrift/http_connection.js
@@ -59,8 +59,6 @@
  * Initializes a Thrift HttpConnection instance (use createHttpConnection() rather than
  *    instantiating directly).
  * @constructor
- * @param {string} host - The host name or IP to connect to.
- * @param {number} port - The TCP port to connect to.
  * @param {ConnectOptions} options - The configuration options to use.
  * @throws {error} Exceptions other than InputBufferUnderrunError are rethrown
  * @event {error} The "error" event is fired when a Node.js error event occurs during
@@ -71,15 +69,16 @@
  *     semantics implemented over the Node.js http.request() method.
  * @see {@link createHttpConnection}
  */
-var HttpConnection = exports.HttpConnection = function(host, port, options) {
+var HttpConnection = exports.HttpConnection = function(options) {
   //Initialize the emitter base object
   EventEmitter.call(this);
 
   //Set configuration
   var self = this;
   this.options = options || {};
-  this.host = host;
-  this.port = port;
+  this.host = this.options.host;
+  this.port = this.options.port;
+  this.socketPath = this.options.socketPath;
   this.https = this.options.https || false;
   this.transport = this.options.transport || TBufferedTransport;
   this.protocol = this.options.protocol || TBinaryProtocol;
@@ -87,7 +86,8 @@
   //Prepare Node.js options
   this.nodeOptions = {
     host: this.host,
-    port: this.port || 80,
+    port: this.port,
+    socketPath: this.socketPath,
     path: this.options.path || '/',
     method: 'POST',
     headers: this.options.headers || {},
@@ -238,7 +238,14 @@
  * @see {@link ConnectOptions}
  */
 exports.createHttpConnection = function(host, port, options) {
-  return new HttpConnection(host, port, options);
+  options.host = host;
+  options.port = port || 80;
+  return new HttpConnection(options);
+};
+
+exports.createHttpUDSConnection = function(path, options) {
+  options.socketPath = path;
+  return new HttpConnection(options);
 };
 
 exports.createHttpClient = createClient
@@ -253,4 +260,4 @@
   this.type = thrift.TApplicationExceptionType.PROTOCOL_ERROR;
   this.message = "Received a response with a bad HTTP status code: " + response.statusCode;
 }
-util.inherits(THTTPException, thrift.TApplicationException);
\ No newline at end of file
+util.inherits(THTTPException, thrift.TApplicationException);
diff --git a/lib/nodejs/lib/thrift/index.js b/lib/nodejs/lib/thrift/index.js
index 020726d..b09953d 100644
--- a/lib/nodejs/lib/thrift/index.js
+++ b/lib/nodejs/lib/thrift/index.js
@@ -27,6 +27,7 @@
 exports.Connection = connection.Connection;
 exports.createClient = connection.createClient;
 exports.createConnection = connection.createConnection;
+exports.createUDSConnection = connection.createUDSConnection;
 exports.createSSLConnection = connection.createSSLConnection;
 exports.createStdIOClient = connection.createStdIOClient;
 exports.createStdIOConnection = connection.createStdIOConnection;
@@ -34,6 +35,7 @@
 var httpConnection = require('./http_connection');
 exports.HttpConnection = httpConnection.HttpConnection;
 exports.createHttpConnection = httpConnection.createHttpConnection;
+exports.createHttpUDSConnection = httpConnection.createHttpUDSConnection;
 exports.createHttpClient = httpConnection.createHttpClient;
 
 var wsConnection = require('./ws_connection');
diff --git a/lib/nodejs/test/client.js b/lib/nodejs/test/client.js
index 006fad2..55839f6 100644
--- a/lib/nodejs/test/client.js
+++ b/lib/nodejs/test/client.js
@@ -36,6 +36,7 @@
   .option('-t, --transport <transport>', 'Set thrift transport (buffered|framed|http) [transport]')
   .option('--port <port>', 'Set thrift server port number to connect', 9090)
   .option('--host <host>', 'Set thrift server host to connect', 'localhost')
+  .option('--domain-socket <path>', 'Set thrift server unix domain socket to connect')
   .option('--ssl', 'use SSL transport')
   .option('--promise', 'test with promise style functions')
   .option('-t, --type <type>', 'Select server type (http|multiplex|tcp|websocket)', 'tcp')
@@ -43,6 +44,7 @@
 
 var host = program.host;
 var port = program.port;
+var domainSocket = program.domainSocket;
 var type = program.type;
 var ssl = program.ssl;
 var promise = program.promise;
@@ -83,11 +85,19 @@
 var testDriver = promise ? ThriftTestDriverPromise : ThriftTestDriver;
 
 if (type === 'tcp' || type === 'multiplex') {
-  connection = ssl ?
-    thrift.createSSLConnection(host, port, options) :
-    thrift.createConnection(host, port, options);
+  if (domainSocket) {
+    connection = thrift.createUDSConnection(domainSocket, options);
+  } else {
+    connection = ssl ?
+      thrift.createSSLConnection(host, port, options) :
+      thrift.createConnection(host, port, options);
+  }
 } else if (type === 'http') {
-  connection = thrift.createHttpConnection(host, port, options);
+  if (domainSocket) {
+    connection = thrift.createHttpUDSConnection(domainSocket, options);
+  } else {
+    connection = thrift.createHttpConnection(host, port, options);
+  }
 } else if (type === 'websocket') {
   connection = thrift.createWSConnection(host, port, options);
   connection.open();
diff --git a/lib/nodejs/test/server.js b/lib/nodejs/test/server.js
index 8f2e06b..030d28b 100644
--- a/lib/nodejs/test/server.js
+++ b/lib/nodejs/test/server.js
@@ -36,11 +36,13 @@
   .option('-t, --transport <transport>', 'Set thrift transport (buffered|framed|http)', 'buffered')
   .option('--ssl', 'use ssl transport')
   .option('--port <port>', 'Set thrift server port', 9090)
+  .option('--domain-socket <path>', 'Set thift server unix domain socket')
   .option('--promise', 'test with promise style functions')
   .option('-t, --type <type>', 'Select server type (http|multiplex|tcp|websocket)', 'tcp')
   .parse(process.argv);
 
 var port = program.port;
+var domainSocket = program.domainSocket;
 var type = program.type;
 var ssl = program.ssl;
 var promise = program.promise;
@@ -88,10 +90,12 @@
 }
 
 if (ssl) {
-  options.tls = {
-    key: fs.readFileSync(path.resolve(__dirname, 'server.key')),
-    cert: fs.readFileSync(path.resolve(__dirname, 'server.crt'))
-  };
+  if (type === 'tcp' || type === 'multiplex' || type === 'http' || type === 'websocket') {
+    options.tls = {
+      key: fs.readFileSync(path.resolve(__dirname, 'server.key')),
+      cert: fs.readFileSync(path.resolve(__dirname, 'server.crt'))
+    };
+  }
 }
 
 var server;
@@ -103,4 +107,8 @@
   server = thrift.createWebServer(options);
 }
 
-server.listen(port);
+if (domainSocket) {
+  server.listen(domainSocket);
+} else if (type === 'tcp' || type === 'multiplex' || type === 'http' || type === 'websocket') {
+  server.listen(port);
+}
