Skip to content

Commit 4bbf5ea

Browse files
committed
net: fix net keepalive and noDelay
1. support setKeepAlive again 2. set keepalive and nodelay to socket which is created by server
1 parent 3507b3f commit 4bbf5ea

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-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

+12
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@ const server = net.createServer({
77
keepAlive: true,
88
keepAliveInitialDelay: 1000
99
}, common.mustCall((socket) => {
10+
const symbols = Object.getOwnPropertySymbols(socket);
11+
for (let i = 0; i < symbols.length; i++) {
12+
if (symbols[i].toString() === 'Symbol(kSetKeepAlive)') {
13+
assert.strictEqual(socket[symbols[i]], server.keepAlive);
14+
} else if (symbols[i].toString() === 'Symbol(kSetKeepAliveInitialDelay)') {
15+
assert.strictEqual(socket[symbols[i]], server.keepAliveInitialDelay);
16+
socket.setKeepAlive(true, 2000);
17+
socket.setKeepAlive(true, 3000);
18+
assert.strictEqual(socket[symbols[i]], 3000 / 1000);
19+
}
20+
}
1021
socket.destroy();
1122
server.close();
1223
})).listen(0, common.mustCall(() => {
@@ -20,6 +31,7 @@ server._handle.onconnection = common.mustCall((err, clientHandle) => {
2031
assert.strictEqual(enable, server.keepAlive);
2132
assert.strictEqual(initialDelayMsecs, server.keepAliveInitialDelay);
2233
setKeepAlive.call(clientHandle, enable, initialDelayMsecs);
34+
clientHandle.setKeepAlive = setKeepAlive;
2335
});
2436
onconnection.call(server._handle, err, clientHandle);
2537
});

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

+7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ const net = require('net');
66
const server = net.createServer({
77
noDelay: true
88
}, common.mustCall((socket) => {
9+
const symbols = Object.getOwnPropertySymbols(socket);
10+
for (let i = 0; i < symbols.length; i++) {
11+
if (symbols[i].toString() === 'Symbol(kSetNoDelay)') {
12+
assert.strictEqual(socket[symbols[i]], server.noDelay);
13+
break;
14+
}
15+
}
916
socket.destroy();
1017
server.close();
1118
})).listen(0, common.mustCall(() => {

0 commit comments

Comments
 (0)