mirror of
https://github.com/nodejs/node.git
synced 2025-05-01 17:03:34 +00:00

This avoids routing writes through the full LibuvStreamWrap write machinery. In particular, it enables the next commit, because otherwise the callback passed to `_write()` would not be called synchronously for pipes on Windows (because the latter does not support `uv_try_write()`, even for blocking I/O). PR-URL: https://github.com/nodejs/node/pull/18019 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
40 lines
1.0 KiB
JavaScript
40 lines
1.0 KiB
JavaScript
'use strict';
|
|
|
|
const Buffer = require('buffer').Buffer;
|
|
const { writeBuffer } = process.binding('fs');
|
|
|
|
// Check that the port number is not NaN when coerced to a number,
|
|
// is an integer and that it falls within the legal range of port numbers.
|
|
function isLegalPort(port) {
|
|
if ((typeof port !== 'number' && typeof port !== 'string') ||
|
|
(typeof port === 'string' && port.trim().length === 0))
|
|
return false;
|
|
return +port === (+port >>> 0) && port <= 0xFFFF;
|
|
}
|
|
|
|
function makeSyncWrite(fd) {
|
|
return function(chunk, enc, cb) {
|
|
if (enc !== 'buffer')
|
|
chunk = Buffer.from(chunk, enc);
|
|
|
|
this._bytesDispatched += chunk.length;
|
|
|
|
try {
|
|
writeBuffer(fd, chunk, 0, chunk.length, null);
|
|
} catch (ex) {
|
|
// Legacy: net writes have .code === .errno, whereas writeBuffer gives the
|
|
// raw errno number in .errno.
|
|
if (typeof ex.code === 'string')
|
|
ex.errno = ex.code;
|
|
return cb(ex);
|
|
}
|
|
cb();
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
isLegalPort,
|
|
makeSyncWrite,
|
|
normalizedArgsSymbol: Symbol('normalizedArgs')
|
|
};
|