Skip to content

Commit 19506bb

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 19506bb

File tree

3 files changed

+24
-1
lines changed

3 files changed

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

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ 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+
return setKeepAlive.call(socket._handle, enable, initialDelay);
13+
}, 2);
14+
socket.setKeepAlive(true, 1000);
15+
socket.setKeepAlive(true, 2000);
16+
socket.setKeepAlive(true, 3000);
1017
socket.destroy();
1118
server.close();
1219
})).listen(0, common.mustCall(() => {
@@ -20,6 +27,7 @@ server._handle.onconnection = common.mustCall((err, clientHandle) => {
2027
assert.strictEqual(enable, server.keepAlive);
2128
assert.strictEqual(initialDelayMsecs, server.keepAliveInitialDelay);
2229
setKeepAlive.call(clientHandle, enable, initialDelayMsecs);
30+
clientHandle.setKeepAlive = setKeepAlive;
2331
});
2432
onconnection.call(server._handle, err, clientHandle);
2533
});

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)