diff --git a/doc/api/net.markdown b/doc/api/net.markdown index 1789560b81..dab1df76aa 100644 --- a/doc/api/net.markdown +++ b/doc/api/net.markdown @@ -226,7 +226,7 @@ Useful to throttle back an upload. Resumes reading after a call to `pause()`. -#### socket.setTimeout(timeout) +#### socket.setTimeout(timeout, [callback]) Sets the socket to timeout after `timeout` milliseconds of inactivity on the socket. By default `net.Socket` do not have a timeout. @@ -237,6 +237,8 @@ or `destroy()` the socket. If `timeout` is 0, then the existing idle timeout is disabled. +The optional `callback` parameter will be added as a one time listener for the `'timeout'` event. + #### socket.setNoDelay(noDelay=true) Disables the Nagle algorithm. By default TCP connections use the Nagle diff --git a/lib/net.js b/lib/net.js index 9596725872..5953c19f02 100644 --- a/lib/net.js +++ b/lib/net.js @@ -690,10 +690,13 @@ Socket.prototype.setKeepAlive = function(enable, time) { } }; -Socket.prototype.setTimeout = function(msecs) { +Socket.prototype.setTimeout = function(msecs, callback) { if (msecs > 0) { timers.enroll(this, msecs); if (this.fd) { timers.active(this); } + if (callback) { + this.once('timeout', callback); + } } else if (msecs === 0) { timers.unenroll(this); } diff --git a/test/simple/test-net-socket-timeout.js b/test/simple/test-net-socket-timeout.js new file mode 100644 index 0000000000..c4d84fa177 --- /dev/null +++ b/test/simple/test-net-socket-timeout.js @@ -0,0 +1,23 @@ +var common = require('../common'); +var net = require('net'); +var assert = require('assert'); + +var timedout = false; + +var server = net.Server(); +server.listen(common.PORT, function() { + var socket = net.createConnection(common.PORT); + socket.setTimeout(100, function() { + timedout = true; + socket.destroy(); + server.close(); + clearTimeout(timer); + }); + var timer = setTimeout(function() { + process.exit(1); + }, 200); +}); + +process.on('exit', function() { + assert.ok(timedout); +});