summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/net.js14
-rw-r--r--test/parallel/test-net-server-keepalive.js10
-rw-r--r--test/parallel/test-net-server-nodelay.js3
3 files changed, 26 insertions, 1 deletions
diff --git a/lib/net.js b/lib/net.js
index f72a745bcc..c7f932c736 100644
--- a/lib/net.js
+++ b/lib/net.js
@@ -554,7 +554,16 @@ Socket.prototype.setKeepAlive = function(enable, initialDelayMsecs) {
return this;
}
- if (this._handle.setKeepAlive && enable !== this[kSetKeepAlive]) {
+ if (!this._handle.setKeepAlive) {
+ return this;
+ }
+
+ if (enable !== this[kSetKeepAlive] ||
+ (
+ enable &&
+ this[kSetKeepAliveInitialDelay] !== initialDelay
+ )
+ ) {
this[kSetKeepAlive] = enable;
this[kSetKeepAliveInitialDelay] = initialDelay;
this._handle.setKeepAlive(enable, initialDelay);
@@ -1660,9 +1669,12 @@ function onconnection(err, clientHandle) {
});
if (self.noDelay && clientHandle.setNoDelay) {
+ socket[kSetNoDelay] = true;
clientHandle.setNoDelay(true);
}
if (self.keepAlive && clientHandle.setKeepAlive) {
+ socket[kSetKeepAlive] = true;
+ socket[kSetKeepAliveInitialDelay] = self.keepAliveInitialDelay;
clientHandle.setKeepAlive(true, self.keepAliveInitialDelay);
}
diff --git a/test/parallel/test-net-server-keepalive.js b/test/parallel/test-net-server-keepalive.js
index 384787d22b..6f3db6468f 100644
--- a/test/parallel/test-net-server-keepalive.js
+++ b/test/parallel/test-net-server-keepalive.js
@@ -7,6 +7,15 @@ const server = net.createServer({
keepAlive: true,
keepAliveInitialDelay: 1000
}, common.mustCall((socket) => {
+ const setKeepAlive = socket._handle.setKeepAlive;
+ socket._handle.setKeepAlive = common.mustCall((enable, initialDelay) => {
+ assert.strictEqual(enable, true);
+ assert.match(String(initialDelay), /^2|3$/);
+ return setKeepAlive.call(socket._handle, enable, initialDelay);
+ }, 2);
+ socket.setKeepAlive(true, 1000);
+ socket.setKeepAlive(true, 2000);
+ socket.setKeepAlive(true, 3000);
socket.destroy();
server.close();
})).listen(0, common.mustCall(() => {
@@ -20,6 +29,7 @@ server._handle.onconnection = common.mustCall((err, clientHandle) => {
assert.strictEqual(enable, server.keepAlive);
assert.strictEqual(initialDelayMsecs, server.keepAliveInitialDelay);
setKeepAlive.call(clientHandle, enable, initialDelayMsecs);
+ clientHandle.setKeepAlive = setKeepAlive;
});
onconnection.call(server._handle, err, clientHandle);
});
diff --git a/test/parallel/test-net-server-nodelay.js b/test/parallel/test-net-server-nodelay.js
index f5ee77f71c..a7f11475ab 100644
--- a/test/parallel/test-net-server-nodelay.js
+++ b/test/parallel/test-net-server-nodelay.js
@@ -6,6 +6,8 @@ const net = require('net');
const server = net.createServer({
noDelay: true
}, common.mustCall((socket) => {
+ socket._handle.setNoDelay = common.mustNotCall();
+ socket.setNoDelay(true);
socket.destroy();
server.close();
})).listen(0, common.mustCall(() => {
@@ -18,6 +20,7 @@ server._handle.onconnection = common.mustCall((err, clientHandle) => {
clientHandle.setNoDelay = common.mustCall((enable) => {
assert.strictEqual(enable, server.noDelay);
setNoDelay.call(clientHandle, enable);
+ clientHandle.setNoDelay = setNoDelay;
});
onconnection.call(server._handle, err, clientHandle);
});