diff --git a/lib/net.js b/lib/net.js index 05273c729f..4f659ba06c 100644 --- a/lib/net.js +++ b/lib/net.js @@ -342,7 +342,7 @@ Socket.prototype.address = function () { Socket.prototype.setNoDelay = function (v) { - setNoDelay(this.fd, v); + if (this.type == 'tcp') setNoDelay(this.fd, v); }; @@ -454,7 +454,7 @@ Server.prototype.listen = function () { self.emit("listening"); } - if (typeof(arguments[0]) == 'string' && arguments.length == 1) { + if (typeof(arguments[0]) == 'string') { // the first argument specifies a path self.fd = socket('unix'); self.type = 'unix'; @@ -484,18 +484,20 @@ Server.prototype.listen = function () { } } }); - } else if (arguments.length == 0) { + } else if (!arguments[0]) { + // Don't bind(). OS will assign a port with INADDR_ANY. + // The port can be found with server.address() self.fd = socket('tcp'); self.type = 'tcp'; - // Don't bind(). OS will assign a port with INADDR_ANY. The port will be - // passed to the 'listening' event. doListen(); } else { // the first argument is the port, the second an IP self.fd = socket('tcp'); self.type = 'tcp'; var port = arguments[0]; + debug("starting tcp server on port " + port); lookupDomainName(arguments[1], function (ip) { + debug("starting tcp server on ip " + ip); bind(self.fd, port, ip); doListen(); }); diff --git a/test-net-server.js b/test-net-server.js index 9d7cd995e3..9c1ddb0bf0 100644 --- a/test-net-server.js +++ b/test-net-server.js @@ -32,8 +32,6 @@ var server = new net.Server(function (socket) { sys.puts("server-side socket drain"); }); }); -server.listen("/tmp/node.sock"); -sys.puts("server fd: " + server.fd); server.addListener("listening", function () { var c = net.createConnection("/tmp/node.sock"); @@ -56,3 +54,5 @@ server.addListener("listening", function () { }); }); +server.listen("/tmp/node.sock"); +sys.puts("server fd: " + server.fd); diff --git a/test/mjsunit/test-net-pingpong.js b/test/mjsunit/test-net-pingpong.js index 955a18a3e2..7569991921 100644 --- a/test/mjsunit/test-net-pingpong.js +++ b/test/mjsunit/test-net-pingpong.js @@ -7,16 +7,13 @@ process.Buffer.prototype.toString = function () { var tests_run = 0; -function pingPongTest (port, host, on_complete) { +function pingPongTest (port, host) { var N = 1000; var count = 0; var sent_final_ping = false; var server = net.createServer(function (socket) { puts("connection: " + socket.remoteAddress); - - assert.equal(true, socket.remoteAddress !== null); - assert.equal(true, socket.remoteAddress !== undefined); assert.equal(server, socket.server); socket.setNoDelay(); @@ -44,53 +41,58 @@ function pingPongTest (port, host, on_complete) { socket.server.close(); }); }); - server.listen(port, host); - - var client = net.createConnection(port, host); - - client.addListener("connect", function () { - assert.equal(true, client.readable); - assert.equal(true, client.writable); - client.send("PING"); - }); - client.addListener("data", function (data) { - puts("client got: " + data); + server.addListener("listening", function () { + puts("server listening on " + port + " " + host); - assert.equal("PONG", data); - count += 1; + var client = net.createConnection(port, host); - if (sent_final_ping) { - assert.equal(false, client.writable); + client.addListener("connect", function () { assert.equal(true, client.readable); - return; - } else { assert.equal(true, client.writable); - assert.equal(true, client.readable); - } - - if (count < N) { - client.send("PING"); - } else { - sent_final_ping = true; client.send("PING"); - client.close(); - } - }); + }); - client.addListener("close", function () { - assert.equal(N+1, count); - assert.equal(true, sent_final_ping); - if (on_complete) on_complete(); - tests_run += 1; + client.addListener("data", function (data) { + puts("client got: " + data); + + assert.equal("PONG", data); + count += 1; + + if (sent_final_ping) { + assert.equal(false, client.writable); + assert.equal(true, client.readable); + return; + } else { + assert.equal(true, client.writable); + assert.equal(true, client.readable); + } + + if (count < N) { + client.send("PING"); + } else { + sent_final_ping = true; + client.send("PING"); + client.close(); + } + }); + + client.addListener("close", function () { + assert.equal(N+1, count); + assert.equal(true, sent_final_ping); + tests_run += 1; + }); }); + + server.listen(port, host); } /* All are run at once, so run on different ports */ pingPongTest(20989, "localhost"); -pingPongTest(20988, null); +pingPongTest(20988); pingPongTest(20997, "::1"); +pingPongTest("/tmp/pingpong.sock"); process.addListener("exit", function () { - assert.equal(3, tests_run); + assert.equal(4, tests_run); });