Idle timeout changes
- setTimeout should active the timeout too. (test-net-set-timeout tests this.) - 'timeout' event is not automatically followed by an 'error' event. That is the user is now responsible for destroying the stream if there is an idle timeout.
This commit is contained in:
parent
f7ff548dd0
commit
d2cff34fa3
@ -2124,8 +2124,11 @@ call `stream.end()` when this event is emitted.
|
||||
|
||||
`function () { }`
|
||||
|
||||
Emitted if the stream times out from inactivity. The
|
||||
`'close'` event will be emitted immediately following this event.
|
||||
Emitted if the stream times out from inactivity. This is only to notify that
|
||||
the stream has been idle. The user must manually close the connection.
|
||||
|
||||
See also: `stream.setTimeout()`
|
||||
|
||||
|
||||
### Event: 'drain'
|
||||
|
||||
@ -2233,10 +2236,13 @@ Resumes reading after a call to `pause()`.
|
||||
### stream.setTimeout(timeout)
|
||||
|
||||
Sets the stream to timeout after `timeout` milliseconds of inactivity on
|
||||
the stream. By default all `net.Stream` objects have a timeout of 60
|
||||
seconds (60000 ms).
|
||||
the stream. By default `net.Stream` do not have a timeout.
|
||||
|
||||
If `timeout` is 0, then the idle timeout is disabled.
|
||||
When an idle timeout is triggered the stream will receive a `'timeout'`
|
||||
event but the connection will not be severed. The user must manually `end()`
|
||||
or `destroy()` the stream.
|
||||
|
||||
If `timeout` is 0, then the existing idle timeout is disabled.
|
||||
|
||||
### stream.setNoDelay(noDelay=true)
|
||||
|
||||
|
@ -146,7 +146,6 @@ var timeout = new (function () {
|
||||
remove(first);
|
||||
assert(first != peek(list));
|
||||
first.emit('timeout');
|
||||
first.destroy(new Error('idle timeout'));
|
||||
}
|
||||
}
|
||||
debug(msecs + ' list empty');
|
||||
@ -816,7 +815,10 @@ Stream.prototype.setKeepAlive = function (enable, time) {
|
||||
};
|
||||
|
||||
Stream.prototype.setTimeout = function (msecs) {
|
||||
timeout.enroll(this, msecs);
|
||||
if (msecs > 0) {
|
||||
timeout.enroll(this, msecs);
|
||||
if (this.fd) { timeout.active(this); }
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -5,8 +5,6 @@ starttime = null;
|
||||
timeouttime = null;
|
||||
timeout = 1000;
|
||||
|
||||
gotError = false
|
||||
|
||||
var echo_server = net.createServer(function (socket) {
|
||||
socket.setTimeout(timeout);
|
||||
|
||||
@ -14,11 +12,11 @@ var echo_server = net.createServer(function (socket) {
|
||||
puts("server timeout");
|
||||
timeouttime = new Date;
|
||||
p(timeouttime);
|
||||
socket.destroy();
|
||||
});
|
||||
|
||||
socket.addListener("error", function (e) {
|
||||
assert.ok(e instanceof Error);
|
||||
gotError = true;
|
||||
throw new Error("Server side socket should not get error. We disconnect willingly.");
|
||||
})
|
||||
|
||||
socket.addListener("data", function (d) {
|
||||
@ -59,8 +57,7 @@ client.addListener("data", function (chunk) {
|
||||
});
|
||||
|
||||
client.addListener("timeout", function () {
|
||||
puts("client timeout - this shouldn't happen");
|
||||
assert.ok(false);
|
||||
throw new Error("client timeout - this shouldn't happen");
|
||||
});
|
||||
|
||||
client.addListener("end", function () {
|
||||
@ -84,6 +81,4 @@ process.addListener("exit", function () {
|
||||
|
||||
// Allow for 800 milliseconds more
|
||||
assert.ok(diff < timeout + 800);
|
||||
|
||||
assert.ok(gotError);
|
||||
});
|
||||
|
39
test/simple/test-net-set-timeout.js
Normal file
39
test/simple/test-net-set-timeout.js
Normal file
@ -0,0 +1,39 @@
|
||||
require("../common");
|
||||
var sys = require('sys'),
|
||||
http = require('http');
|
||||
|
||||
server = http.createServer(function (req, res) {
|
||||
sys.puts('got request. setting 1 second timeout');
|
||||
req.connection.setTimeout(500);
|
||||
|
||||
req.connection.addListener('timeout', function(){
|
||||
sys.debug("TIMEOUT");
|
||||
|
||||
var body="timeout\n";
|
||||
res.writeHead(200, {
|
||||
'Content-Type': 'text/plain',
|
||||
'Content-Length': body.length,
|
||||
'Connection':'close'
|
||||
});
|
||||
res.end(body);
|
||||
req.connection.end();
|
||||
server.close();
|
||||
});
|
||||
});
|
||||
server.listen(8000);
|
||||
|
||||
|
||||
server.addListener('listening', function () {
|
||||
sys.puts('Server running at http://127.0.0.1:8000/');
|
||||
|
||||
errorTimer =setTimeout(function () {
|
||||
throw new Error('Timeout was not sucessful');
|
||||
}, 2000);
|
||||
|
||||
http.cat('http://localhost:8000/', 'utf8', function (err, content) {
|
||||
clearTimeout(errorTimer);
|
||||
if (err) throw err;
|
||||
sys.puts('HTTP REQUEST COMPLETE (this is good)');
|
||||
sys.puts(content);
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user