summaryrefslogtreecommitdiff
path: root/lib/net.js
diff options
context:
space:
mode:
authorAshok <coderatlabs@gmail.com>2018-03-18 13:05:47 +0530
committerAnna Henningsen <anna@addaleax.net>2018-03-27 12:57:23 +0200
commitc2835e5e4705d9e5740a8a88350923d8c227f203 (patch)
treeaa33f4e49af6cf868202e483d288f73c326a19c1 /lib/net.js
parentc46e36b073678ea410ecc649f34c5346a9eb735a (diff)
downloadandroid-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.js74
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;