diff --git a/doc/api/net.markdown b/doc/api/net.markdown index 160e2375ef0..7dd917d540e 100644 --- a/doc/api/net.markdown +++ b/doc/api/net.markdown @@ -388,16 +388,19 @@ algorithm, they buffer data before sending it off. Setting `true` for `noDelay` will immediately fire off data each time `socket.write()` is called. `noDelay` defaults to `true`. -### socket.setKeepAlive([enable], [initialDelay]) +### socket.setKeepAlive([enable], [initialDelay], [probeInterval], [failureCount]) -Enable/disable keep-alive functionality, and optionally set the initial -delay before the first keepalive probe is sent on an idle socket. +Enable/disable keep-alive functionality, and optionally set keep-alive options. +Options default to `0`, which leaves the value unchanged from the default +(or previous) setting. `enable` defaults to `false`. Set `initialDelay` (in milliseconds) to set the delay between the last -data packet received and the first keepalive probe. Setting 0 for -initialDelay will leave the value unchanged from the default -(or previous) setting. Defaults to `0`. +data packet received and the first keepalive probe. +Set `probeInterval` (in milliseconds) to set the interval between the +keep-alive probes sent after the initial probe. +Set `failureCount` to set the maximum number of probes that can fail before +the OS closes the connection. Ignored on Windows. ### socket.address() diff --git a/lib/net.js b/lib/net.js index 934f9f2ea2a..2396e88a3bf 100644 --- a/lib/net.js +++ b/lib/net.js @@ -294,9 +294,9 @@ Socket.prototype.setNoDelay = function(enable) { }; -Socket.prototype.setKeepAlive = function(setting, msecs) { +Socket.prototype.setKeepAlive = function(setting, msecs, interval, count) { if (this._handle && this._handle.setKeepAlive) - this._handle.setKeepAlive(setting, ~~(msecs / 1000)); + this._handle.setKeepAlive(setting, ~~(msecs / 1000), ~~(interval / 1000), ~~count); }; diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc index 4c55f2eff50..10faf40b217 100644 --- a/src/tcp_wrap.cc +++ b/src/tcp_wrap.cc @@ -230,8 +230,10 @@ Handle TCPWrap::SetKeepAlive(const Arguments& args) { int enable = args[0]->Int32Value(); unsigned int delay = args[1]->Uint32Value(); + unsigned int interval = args[2]->Uint32Value(); + unsigned int count = args[3]->Uint32Value(); - int r = uv_tcp_keepalive(&wrap->handle_, enable, delay); + int r = uv_tcp_keepalive(&wrap->handle_, enable, delay, interval, count); if (r) SetErrno(uv_last_error(uv_default_loop()));