From 33c33949b2965512e6e058e6e1e5c800a617d071 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Wed, 12 Jan 2011 10:57:01 -0800 Subject: [PATCH] Add test for connection timeouts Also make socket.end() destroy connection if still trying to connect. Previously was ignoring. --- lib/net.js | 4 ++- test/simple/test-net-connect-timeout.js | 37 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/simple/test-net-connect-timeout.js 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); +});