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;
|
module.exports = Duplex;
|
||||||
|
|
||||||
const util = require('util');
|
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) {
|
function Duplex(options) {
|
||||||
if (!(this instanceof Duplex))
|
if (!(this instanceof Duplex))
|
||||||
return new Duplex(options);
|
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;
|
this.allowHalfOpen = true;
|
||||||
if (options && options.allowHalfOpen === false) {
|
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_BAD_PORT,
|
||||||
ERR_SOCKET_CLOSED
|
ERR_SOCKET_CLOSED
|
||||||
} = errors.codes;
|
} = errors.codes;
|
||||||
const DuplexBase = require('internal/streams/duplex_base');
|
|
||||||
const dns = require('dns');
|
const dns = require('dns');
|
||||||
|
|
||||||
const kLastWriteQueueSize = Symbol('lastWriteQueueSize');
|
const kLastWriteQueueSize = Symbol('lastWriteQueueSize');
|
||||||
@ -242,19 +241,19 @@ function Socket(options) {
|
|||||||
|
|
||||||
if (typeof options === 'number')
|
if (typeof options === 'number')
|
||||||
options = { fd: options }; // Legacy interface.
|
options = { fd: options }; // Legacy interface.
|
||||||
else if (options === undefined)
|
|
||||||
options = {};
|
|
||||||
else
|
else
|
||||||
options = util._extend({}, options);
|
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.
|
// For backwards compat do not emit close on destroy.
|
||||||
options.emitClose = false;
|
options.emitClose = false;
|
||||||
|
stream.Duplex.call(this, options);
|
||||||
|
|
||||||
// `DuplexBase` is just a slimmed down constructor for `Duplex` which allow
|
// Default to *not* allowing half open sockets.
|
||||||
// us to not inherit the "no-half-open enforcer" as there is already one in
|
this.allowHalfOpen = Boolean(allowHalfOpen);
|
||||||
// place. Instances of `Socket` are still instances of `Duplex`, that is,
|
|
||||||
// `socket instanceof Duplex === true`.
|
|
||||||
DuplexBase.call(this, options);
|
|
||||||
|
|
||||||
if (options.handle) {
|
if (options.handle) {
|
||||||
this._handle = options.handle; // private
|
this._handle = options.handle; // private
|
||||||
@ -300,9 +299,6 @@ function Socket(options) {
|
|||||||
// handle strings directly
|
// handle strings directly
|
||||||
this._writableState.decodeStrings = false;
|
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
|
// if we have a handle, then start the flow of data into the
|
||||||
// buffer. if not, then this will happen when we connect
|
// buffer. if not, then this will happen when we connect
|
||||||
if (this._handle && options.readable !== false) {
|
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/lazy_transform.js',
|
||||||
'lib/internal/streams/async_iterator.js',
|
'lib/internal/streams/async_iterator.js',
|
||||||
'lib/internal/streams/buffer_list.js',
|
'lib/internal/streams/buffer_list.js',
|
||||||
'lib/internal/streams/duplex_base.js',
|
|
||||||
'lib/internal/streams/duplexpair.js',
|
'lib/internal/streams/duplexpair.js',
|
||||||
'lib/internal/streams/legacy.js',
|
'lib/internal/streams/legacy.js',
|
||||||
'lib/internal/streams/destroy.js',
|
'lib/internal/streams/destroy.js',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user