common = require("../common"); assert = common.assert net = require("net"); exchanges = 0; starttime = null; timeouttime = null; timeout = 1000; var echo_server = net.createServer(function (socket) { socket.setTimeout(timeout); socket.addListener("timeout", function () { console.log("server timeout"); timeouttime = new Date; console.dir(timeouttime); socket.destroy(); }); socket.addListener("error", function (e) { throw new Error("Server side socket should not get error. We disconnect willingly."); }) socket.addListener("data", function (d) { console.log(d); socket.write(d); }); socket.addListener("end", function () { socket.end(); }); }); echo_server.listen(common.PORT, function () { console.log("server listening at " + common.PORT); var client = net.createConnection(common.PORT); client.setEncoding("UTF8"); client.setTimeout(0); // disable the timeout for client client.addListener("connect", function () { console.log("client connected."); client.write("hello\r\n"); }); client.addListener("data", function (chunk) { assert.equal("hello\r\n", chunk); if (exchanges++ < 5) { setTimeout(function () { console.log("client write 'hello'"); client.write("hello\r\n"); }, 500); if (exchanges == 5) { console.log("wait for timeout - should come in " + timeout + " ms"); starttime = new Date; console.dir(starttime); } } }); client.addListener("timeout", function () { throw new Error("client timeout - this shouldn't happen"); }); client.addListener("end", function () { console.log("client end"); client.end(); }); client.addListener("close", function () { console.log("client disconnect"); echo_server.close(); }); }); process.addListener("exit", function () { assert.ok(starttime != null); assert.ok(timeouttime != null); diff = timeouttime - starttime; console.log("diff = " + diff); assert.ok(timeout < diff); // Allow for 800 milliseconds more assert.ok(diff < timeout + 800); });