diff --git a/lib/net.js b/lib/net.js index 8dbdecd360..facb975ff0 100644 --- a/lib/net.js +++ b/lib/net.js @@ -783,7 +783,9 @@ Socket.prototype._shutdown = function() { Socket.prototype.end = function(data, encoding) { - if (this.writable) { + if (this._connecting) { + this.destroy(); + } else if (this.writable) { if (this._writeQueueLast() !== END_OF_FILE) { if (data) this.write(data, encoding); this._writeQueue.push(END_OF_FILE); diff --git a/test/simple/test-net-connect-timeout.js b/test/simple/test-net-connect-timeout.js new file mode 100644 index 0000000000..cd0cc47ee1 --- /dev/null +++ b/test/simple/test-net-connect-timeout.js @@ -0,0 +1,37 @@ +// This example attempts to time out before the connection is established +// https://groups.google.com/forum/#!topic/nodejs/UE0ZbfLt6t8 +// https://groups.google.com/forum/#!topic/nodejs-dev/jR7-5UDqXkw + +var common = require('../common'); +var net = require('net'); +var assert = require('assert'); + +var start = new Date(); +var gotTimeout = false; +var gotConnect = false; +var T = 100; + +var socket = net.createConnection(9999, '23.23.23.23'); + +socket.setTimeout(T); + + +socket.on('timeout', function() { + console.error("timeout"); + gotTimeout = true; + var now = new Date(); + assert.ok(now - start < T + 500); + socket.end(); +}); + +socket.on('connect', function() { + console.error("connect"); + gotConnect = true; + socket.end(); +}); + + +process.on('exit', function() { + assert.ok(gotTimeout); + assert.ok(!gotConnect); +});