Skip to content

Commit ad1d054

Browse files
theanarkhtargos
authored andcommitted
net: fix net keepalive and noDelay
1. support setKeepAlive again 2. set keepalive and nodelay to socket which is created by server PR-URL: #43561 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 4bda6e0 commit ad1d054

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

lib/net.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,16 @@ Socket.prototype.setKeepAlive = function(enable, initialDelayMsecs) {
554554
return this;
555555
}
556556

557-
if (this._handle.setKeepAlive && enable !== this[kSetKeepAlive]) {
557+
if (!this._handle.setKeepAlive) {
558+
return this;
559+
}
560+
561+
if (enable !== this[kSetKeepAlive] ||
562+
(
563+
enable &&
564+
this[kSetKeepAliveInitialDelay] !== initialDelay
565+
)
566+
) {
558567
this[kSetKeepAlive] = enable;
559568
this[kSetKeepAliveInitialDelay] = initialDelay;
560569
this._handle.setKeepAlive(enable, initialDelay);
@@ -1660,9 +1669,12 @@ function onconnection(err, clientHandle) {
16601669
});
16611670

16621671
if (self.noDelay && clientHandle.setNoDelay) {
1672+
socket[kSetNoDelay] = true;
16631673
clientHandle.setNoDelay(true);
16641674
}
16651675
if (self.keepAlive && clientHandle.setKeepAlive) {
1676+
socket[kSetKeepAlive] = true;
1677+
socket[kSetKeepAliveInitialDelay] = self.keepAliveInitialDelay;
16661678
clientHandle.setKeepAlive(true, self.keepAliveInitialDelay);
16671679
}
16681680

test/parallel/test-net-server-keepalive.js

+10
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@ const server = net.createServer({
77
keepAlive: true,
88
keepAliveInitialDelay: 1000
99
}, common.mustCall((socket) => {
10+
const setKeepAlive = socket._handle.setKeepAlive;
11+
socket._handle.setKeepAlive = common.mustCall((enable, initialDelay) => {
12+
assert.strictEqual(enable, true);
13+
assert.match(String(initialDelay), /^2|3$/);
14+
return setKeepAlive.call(socket._handle, enable, initialDelay);
15+
}, 2);
16+
socket.setKeepAlive(true, 1000);
17+
socket.setKeepAlive(true, 2000);
18+
socket.setKeepAlive(true, 3000);
1019
socket.destroy();
1120
server.close();
1221
})).listen(0, common.mustCall(() => {
@@ -20,6 +29,7 @@ server._handle.onconnection = common.mustCall((err, clientHandle) => {
2029
assert.strictEqual(enable, server.keepAlive);
2130
assert.strictEqual(initialDelayMsecs, server.keepAliveInitialDelay);
2231
setKeepAlive.call(clientHandle, enable, initialDelayMsecs);
32+
clientHandle.setKeepAlive = setKeepAlive;
2333
});
2434
onconnection.call(server._handle, err, clientHandle);
2535
});

test/parallel/test-net-server-nodelay.js

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ const net = require('net');
66
const server = net.createServer({
77
noDelay: true
88
}, common.mustCall((socket) => {
9+
socket._handle.setNoDelay = common.mustNotCall();
10+
socket.setNoDelay(true);
911
socket.destroy();
1012
server.close();
1113
})).listen(0, common.mustCall(() => {
@@ -18,6 +20,7 @@ server._handle.onconnection = common.mustCall((err, clientHandle) => {
1820
clientHandle.setNoDelay = common.mustCall((enable) => {
1921
assert.strictEqual(enable, server.noDelay);
2022
setNoDelay.call(clientHandle, enable);
23+
clientHandle.setNoDelay = setNoDelay;
2124
});
2225
onconnection.call(server._handle, err, clientHandle);
2326
});

0 commit comments

Comments
 (0)