net,stream: remove DuplexBase
`DuplexBase` was added to prevent the "no-half-open enforcer" from being inherited by `net.Socket`. The main reason to use it instead of `Duplex` was that it allowed to not copy the options object but since commit 5e3f516 the options object is copyed anyway so it is no longer useful. PR-URL: https://github.com/nodejs/node/pull/19779 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
dca09a77d5
commit
496d6023e0
@ -29,15 +29,33 @@
|
||||
module.exports = Duplex;
|
||||
|
||||
const util = require('util');
|
||||
const DuplexBase = require('internal/streams/duplex_base');
|
||||
const Readable = require('_stream_readable');
|
||||
const Writable = require('_stream_writable');
|
||||
|
||||
util.inherits(Duplex, DuplexBase);
|
||||
util.inherits(Duplex, Readable);
|
||||
|
||||
{
|
||||
// Allow the keys array to be GC'ed.
|
||||
const keys = Object.keys(Writable.prototype);
|
||||
for (var v = 0; v < keys.length; v++) {
|
||||
const method = keys[v];
|
||||
if (!Duplex.prototype[method])
|
||||
Duplex.prototype[method] = Writable.prototype[method];
|
||||
}
|
||||
}
|
||||
|
||||
function Duplex(options) {
|
||||
if (!(this instanceof Duplex))
|
||||
return new Duplex(options);
|
||||
|
||||
DuplexBase.call(this, options);
|
||||
Readable.call(this, options);
|
||||
Writable.call(this, options);
|
||||
|
||||
if (options && options.readable === false)
|
||||
this.readable = false;
|
||||
|
||||
if (options && options.writable === false)
|
||||
this.writable = false;
|
||||
|
||||
this.allowHalfOpen = true;
|
||||
if (options && options.allowHalfOpen === false) {
|
||||
|
@ -1,30 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
const util = require('util');
|
||||
const Readable = require('_stream_readable');
|
||||
const Writable = require('_stream_writable');
|
||||
|
||||
function DuplexBase(options) {
|
||||
Readable.call(this, options);
|
||||
Writable.call(this, options);
|
||||
|
||||
if (options && options.readable === false)
|
||||
this.readable = false;
|
||||
|
||||
if (options && options.writable === false)
|
||||
this.writable = false;
|
||||
}
|
||||
|
||||
util.inherits(DuplexBase, Readable);
|
||||
|
||||
{
|
||||
// Avoid scope creep, the keys array can then be collected.
|
||||
const keys = Object.keys(Writable.prototype);
|
||||
for (var v = 0; v < keys.length; v++) {
|
||||
const method = keys[v];
|
||||
if (!DuplexBase.prototype[method])
|
||||
DuplexBase.prototype[method] = Writable.prototype[method];
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DuplexBase;
|
18
lib/net.js
18
lib/net.js
@ -75,7 +75,6 @@ const {
|
||||
ERR_SOCKET_BAD_PORT,
|
||||
ERR_SOCKET_CLOSED
|
||||
} = errors.codes;
|
||||
const DuplexBase = require('internal/streams/duplex_base');
|
||||
const dns = require('dns');
|
||||
|
||||
const kLastWriteQueueSize = Symbol('lastWriteQueueSize');
|
||||
@ -242,19 +241,19 @@ function Socket(options) {
|
||||
|
||||
if (typeof options === 'number')
|
||||
options = { fd: options }; // Legacy interface.
|
||||
else if (options === undefined)
|
||||
options = {};
|
||||
else
|
||||
options = util._extend({}, options);
|
||||
|
||||
const allowHalfOpen = options.allowHalfOpen;
|
||||
|
||||
// Prevent the "no-half-open enforcer" from being inherited from `Duplex`.
|
||||
options.allowHalfOpen = true;
|
||||
// For backwards compat do not emit close on destroy.
|
||||
options.emitClose = false;
|
||||
stream.Duplex.call(this, options);
|
||||
|
||||
// `DuplexBase` is just a slimmed down constructor for `Duplex` which allow
|
||||
// us to not inherit the "no-half-open enforcer" as there is already one in
|
||||
// place. Instances of `Socket` are still instances of `Duplex`, that is,
|
||||
// `socket instanceof Duplex === true`.
|
||||
DuplexBase.call(this, options);
|
||||
// Default to *not* allowing half open sockets.
|
||||
this.allowHalfOpen = Boolean(allowHalfOpen);
|
||||
|
||||
if (options.handle) {
|
||||
this._handle = options.handle; // private
|
||||
@ -300,9 +299,6 @@ function Socket(options) {
|
||||
// handle strings directly
|
||||
this._writableState.decodeStrings = false;
|
||||
|
||||
// default to *not* allowing half open sockets
|
||||
this.allowHalfOpen = options.allowHalfOpen || false;
|
||||
|
||||
// if we have a handle, then start the flow of data into the
|
||||
// buffer. if not, then this will happen when we connect
|
||||
if (this._handle && options.readable !== false) {
|
||||
|
1
node.gyp
1
node.gyp
@ -150,7 +150,6 @@
|
||||
'lib/internal/streams/lazy_transform.js',
|
||||
'lib/internal/streams/async_iterator.js',
|
||||
'lib/internal/streams/buffer_list.js',
|
||||
'lib/internal/streams/duplex_base.js',
|
||||
'lib/internal/streams/duplexpair.js',
|
||||
'lib/internal/streams/legacy.js',
|
||||
'lib/internal/streams/destroy.js',
|
||||
|
Loading…
x
Reference in New Issue
Block a user