|
|
|
process.mixin(require("../common"));
|
|
|
|
tcp = require("tcp");
|
|
|
|
exchanges = 0;
|
|
|
|
starttime = null;
|
|
|
|
timeouttime = null;
|
|
|
|
timeout = 1000;
|
|
|
|
|
|
|
|
var echo_server = tcp.createServer(function (socket) {
|
|
|
|
socket.setTimeout(timeout);
|
|
|
|
|
|
|
|
socket.addListener("timeout", function (d) {
|
|
|
|
puts("server timeout");
|
|
|
|
timeouttime = new Date;
|
|
|
|
p(timeouttime);
|
|
|
|
});
|
|
|
|
|
|
|
|
socket.addListener("data", function (d) {
|
|
|
|
p(d);
|
|
|
|
socket.write(d);
|
|
|
|
});
|
|
|
|
|
|
|
|
socket.addListener("end", function () {
|
|
|
|
socket.close();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
echo_server.listen(PORT);
|
|
|
|
puts("server listening at " + PORT);
|
|
|
|
|
|
|
|
var client = tcp.createConnection(PORT);
|
|
|
|
client.setEncoding("UTF8");
|
|
|
|
client.setTimeout(0); // disable the timeout for client
|
|
|
|
client.addListener("connect", function () {
|
|
|
|
puts("client connected.");
|
|
|
|
client.write("hello\r\n");
|
|
|
|
});
|
|
|
|
|
|
|
|
client.addListener("data", function (chunk) {
|
|
|
|
assert.equal("hello\r\n", chunk);
|
|
|
|
if (exchanges++ < 5) {
|
|
|
|
setTimeout(function () {
|
|
|
|
puts("client write 'hello'");
|
|
|
|
client.write("hello\r\n");
|
|
|
|
}, 500);
|
|
|
|
|
|
|
|
if (exchanges == 5) {
|
|
|
|
puts("wait for timeout - should come in " + timeout + " ms");
|
|
|
|
starttime = new Date;
|
|
|
|
p(starttime);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
client.addListener("timeout", function () {
|
|
|
|
puts("client timeout - this shouldn't happen");
|
|
|
|
assert.equal(false, true);
|
|
|
|
});
|
|
|
|
|
|
|
|
client.addListener("end", function () {
|
|
|
|
puts("client end");
|
|
|
|
client.close();
|
|
|
|
});
|
|
|
|
|
|
|
|
client.addListener("close", function (had_error) {
|
|
|
|
puts("client disconnect");
|
|
|
|
echo_server.close();
|
|
|
|
assert.equal(false, had_error);
|
|
|
|
});
|
|
|
|
|
|
|
|
process.addListener("exit", function () {
|
|
|
|
assert.equal(true, starttime != null);
|
|
|
|
assert.equal(true, timeouttime != null);
|
|
|
|
|
|
|
|
diff = timeouttime - starttime;
|
|
|
|
puts("diff = " + diff);
|
|
|
|
assert.equal(true, timeout < diff);
|
|
|
|
// Allow for 800 milliseconds more
|
|
|
|
assert.equal(true, diff < timeout + 800);
|
|
|
|
});
|