From e2110f7aad39047ac9264928651579e555683061 Mon Sep 17 00:00:00 2001 From: James Hartig Date: Thu, 1 Dec 2011 17:50:45 -0500 Subject: [PATCH] Added interval and count to setKeepAlive. --- doc/api/net.markdown | 19 +++++++++++-------- lib/net.js | 4 ++-- src/tcp_wrap.cc | 4 +++- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/doc/api/net.markdown b/doc/api/net.markdown index 1eb02ddba3a..8178ebbb737 100644 --- a/doc/api/net.markdown +++ b/doc/api/net.markdown @@ -339,14 +339,17 @@ Disables the Nagle algorithm. By default TCP connections use the Nagle algorithm, they buffer data before sending it off. Setting `noDelay` will immediately fire off data each time `socket.write()` is called. -#### socket.setKeepAlive(enable=false, [initialDelay]) - -Enable/disable keep-alive functionality, and optionally set the initial -delay before the first keepalive probe is sent on an idle socket. -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. +#### socket.setKeepAlive(enable=false, [initialDelay], [probeInterval], [failureCount]) + +Enable/disable keep-alive functionality, and optionally override default +keep-alive options. Set `initialDelay` (in milliseconds) to set the delay +between the last 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. +probeInterval and failureCount do not work on Windows OS. Setting 0 for +initialDelay, probeInterval, or failureCount will leave the value unchanged +from the default (or previous) setting. #### socket.address() diff --git a/lib/net.js b/lib/net.js index c11189ee5db..56ea81f8985 100644 --- a/lib/net.js +++ b/lib/net.js @@ -158,9 +158,9 @@ Socket.prototype.setNoDelay = function() { }; -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 b2b8c5cd563..305b7374326 100644 --- a/src/tcp_wrap.cc +++ b/src/tcp_wrap.cc @@ -267,8 +267,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()));