diff options
author | Ashok <coderatlabs@gmail.com> | 2018-03-18 13:05:47 +0530 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-03-27 12:57:23 +0200 |
commit | c2835e5e4705d9e5740a8a88350923d8c227f203 (patch) | |
tree | aa33f4e49af6cf868202e483d288f73c326a19c1 /lib/net.js | |
parent | c46e36b073678ea410ecc649f34c5346a9eb735a (diff) | |
download | android-node-v8-c2835e5e4705d9e5740a8a88350923d8c227f203.tar.gz android-node-v8-c2835e5e4705d9e5740a8a88350923d8c227f203.tar.bz2 android-node-v8-c2835e5e4705d9e5740a8a88350923d8c227f203.zip |
lib: merge stream code for http2 streams & net.Socket
Squashed from:
- lib: separate writev responsibilities from writeGeneric
- lib: fix calling of cb twice
- lib: extract streamId out of stream_base to caller
- lib: add symbols instead of methods to hide impl details
- lib: remove unneeded lines
- lib: use Object.assign instead of apply
- lib: rename mixin StreamBase to StreamSharedMethods
- lib: use stream shared funcs as top level instead of
properties of prototypes
- lib: mv lib/internal/stream_shared_methods.js
lib/internal/stream_base_commons.js
- lib: add comment for readability
- lib: refactor _writev in Http2Stream
- lib: rephrase comment
- lib: revert usage of const,let for perf reasons
PR-URL: https://github.com/nodejs/node/pull/19527
Refs: https://github.com/nodejs/node/issues/19060
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'lib/net.js')
-rw-r--r-- | lib/net.js | 74 |
1 files changed, 14 insertions, 60 deletions
diff --git a/lib/net.js b/lib/net.js index e3cd8559b9..c9116fb1a8 100644 --- a/lib/net.js +++ b/lib/net.js @@ -46,12 +46,17 @@ const { TCP, constants: TCPConstants } = process.binding('tcp_wrap'); const { Pipe, constants: PipeConstants } = process.binding('pipe_wrap'); const { TCPConnectWrap } = process.binding('tcp_wrap'); const { PipeConnectWrap } = process.binding('pipe_wrap'); -const { ShutdownWrap, WriteWrap } = process.binding('stream_wrap'); +const { ShutdownWrap } = process.binding('stream_wrap'); const { newAsyncId, defaultTriggerAsyncIdScope, symbols: { async_id_symbol } } = require('internal/async_hooks'); +const { + createWriteWrap, + writevGeneric, + writeGeneric +} = require('internal/stream_base_commons'); const errors = require('internal/errors'); const { ERR_INVALID_ADDRESS_FAMILY, @@ -740,38 +745,15 @@ Socket.prototype._writeGeneric = function(writev, data, encoding, cb) { return false; } - var req = new WriteWrap(); - req.handle = this._handle; - req.oncomplete = afterWrite; - req.async = false; - var err; - - if (writev) { - var allBuffers = data.allBuffers; - var chunks; - var i; - if (allBuffers) { - chunks = data; - for (i = 0; i < data.length; i++) - data[i] = data[i].chunk; - } else { - chunks = new Array(data.length << 1); - for (i = 0; i < data.length; i++) { - var entry = data[i]; - chunks[i * 2] = entry.chunk; - chunks[i * 2 + 1] = entry.encoding; - } - } - err = this._handle.writev(req, chunks, allBuffers); - - // Retain chunks - if (err === 0) req._chunks = chunks; - } else { - err = createWriteReq(req, this._handle, data, encoding); - } + var ret; + var req = createWriteWrap(this._handle, afterWrite); + if (writev) + ret = writevGeneric(this, req, data, cb); + else + ret = writeGeneric(this, req, data, encoding, cb); - if (err) - return this.destroy(errnoException(err, 'write', req.error), cb); + // Bail out if handle.write* returned an error + if (ret) return ret; this._bytesDispatched += req.bytes; @@ -794,34 +776,6 @@ Socket.prototype._write = function(data, encoding, cb) { this._writeGeneric(false, data, encoding, cb); }; -function createWriteReq(req, handle, data, encoding) { - switch (encoding) { - case 'latin1': - case 'binary': - return handle.writeLatin1String(req, data); - - case 'buffer': - return handle.writeBuffer(req, data); - - case 'utf8': - case 'utf-8': - return handle.writeUtf8String(req, data); - - case 'ascii': - return handle.writeAsciiString(req, data); - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return handle.writeUcs2String(req, data); - - default: - return handle.writeBuffer(req, Buffer.from(data, encoding)); - } -} - - protoGetter('bytesWritten', function bytesWritten() { var bytes = this._bytesDispatched; const state = this._writableState; |