From d6e7851e9fd83ec77528f1f0b899a435ab6647b0 Mon Sep 17 00:00:00 2001 From: Luciano Leggieri <230980@gmail.com> Date: Sat, 22 Jul 2023 10:22:19 +1000 Subject: [PATCH] net: set default highwatermark at socket creation time --- lib/net.js | 8 ++------ .../test-http-server-options-highwatermark.js | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/net.js b/lib/net.js index 7f9b1e5c084d8c..ca8c1f32d41556 100644 --- a/lib/net.js +++ b/lib/net.js @@ -156,7 +156,6 @@ const { startPerf, stopPerf, } = require('internal/perf/observe'); -const { getDefaultHighWaterMark } = require('internal/streams/state'); function getFlags(ipv6Only) { return ipv6Only === true ? TCPConstants.UV_TCP_IPV6ONLY : 0; @@ -1735,11 +1734,8 @@ function Server(options, connectionListener) { if (typeof options.highWaterMark !== 'undefined') { validateNumber( options.highWaterMark, 'options.highWaterMark', + 0, ); - - if (options.highWaterMark < 0) { - options.highWaterMark = getDefaultHighWaterMark(); - } } this._connections = 0; @@ -1755,7 +1751,7 @@ function Server(options, connectionListener) { this.noDelay = Boolean(options.noDelay); this.keepAlive = Boolean(options.keepAlive); this.keepAliveInitialDelay = ~~(options.keepAliveInitialDelay / 1000); - this.highWaterMark = options.highWaterMark ?? getDefaultHighWaterMark(); + this.highWaterMark = options.highWaterMark; } ObjectSetPrototypeOf(Server.prototype, EventEmitter.prototype); ObjectSetPrototypeOf(Server, EventEmitter); diff --git a/test/parallel/test-http-server-options-highwatermark.js b/test/parallel/test-http-server-options-highwatermark.js index 2b96b33f17c915..c9e526e4605c97 100644 --- a/test/parallel/test-http-server-options-highwatermark.js +++ b/test/parallel/test-http-server-options-highwatermark.js @@ -5,7 +5,7 @@ const assert = require('assert'); const http = require('http'); const { kHighWaterMark } = require('_http_outgoing'); -const { getDefaultHighWaterMark } = require('internal/streams/state'); +const { getDefaultHighWaterMark, setDefaultHighWaterMark } = require('internal/streams/state'); function listen(server) { server.listen(0, common.mustCall(() => { @@ -45,3 +45,17 @@ function listen(server) { listen(server); } + +{ + const server = http.createServer( + common.mustCall((req, res) => { + assert.strictEqual(req._readableState.highWaterMark, getDefaultHighWaterMark() * 2); + assert.strictEqual(res[kHighWaterMark], getDefaultHighWaterMark() * 2); + res.statusCode = 200; + res.end(); + }) + ); + + setDefaultHighWaterMark(false, getDefaultHighWaterMark() * 2); + listen(server); +}