%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
'use strict';
const common = require('../common');
const assert = require('assert');
const net = require('net');
const message = Buffer.from('hello world');
// Test typical usage
net.createServer(common.mustCall(function(socket) {
this.close();
socket.end(message);
})).listen(0, function() {
let received = 0;
const buffers = [];
const sockBuf = Buffer.alloc(8);
net.connect({
port: this.address().port,
onread: {
buffer: sockBuf,
callback: function(nread, buf) {
assert.strictEqual(buf, sockBuf);
received += nread;
buffers.push(Buffer.from(buf.slice(0, nread)));
}
}
}).on('data', common.mustNotCall()).on('end', common.mustCall(() => {
assert.strictEqual(received, message.length);
assert.deepStrictEqual(Buffer.concat(buffers), message);
}));
});
// Test Uint8Array support
net.createServer(common.mustCall(function(socket) {
this.close();
socket.end(message);
})).listen(0, function() {
let received = 0;
let incoming = new Uint8Array(0);
const sockBuf = new Uint8Array(8);
net.connect({
port: this.address().port,
onread: {
buffer: sockBuf,
callback: function(nread, buf) {
assert.strictEqual(buf, sockBuf);
received += nread;
const newIncoming = new Uint8Array(incoming.length + nread);
newIncoming.set(incoming);
newIncoming.set(buf.slice(0, nread), incoming.length);
incoming = newIncoming;
}
}
}).on('data', common.mustNotCall()).on('end', common.mustCall(() => {
assert.strictEqual(received, message.length);
assert.deepStrictEqual(incoming, new Uint8Array(message));
}));
});
// Test Buffer callback usage
net.createServer(common.mustCall(function(socket) {
this.close();
socket.end(message);
})).listen(0, function() {
let received = 0;
const incoming = [];
const bufPool = [ Buffer.alloc(2), Buffer.alloc(2), Buffer.alloc(2) ];
let bufPoolIdx = -1;
let bufPoolUsage = 0;
net.connect({
port: this.address().port,
onread: {
buffer: () => {
++bufPoolUsage;
bufPoolIdx = (bufPoolIdx + 1) % bufPool.length;
return bufPool[bufPoolIdx];
},
callback: function(nread, buf) {
assert.strictEqual(buf, bufPool[bufPoolIdx]);
received += nread;
incoming.push(Buffer.from(buf.slice(0, nread)));
}
}
}).on('data', common.mustNotCall()).on('end', common.mustCall(() => {
assert.strictEqual(received, message.length);
assert.deepStrictEqual(Buffer.concat(incoming), message);
assert.strictEqual(bufPoolUsage, 7);
}));
});
// Test Uint8Array callback support
net.createServer(common.mustCall(function(socket) {
this.close();
socket.end(message);
})).listen(0, function() {
let received = 0;
let incoming = new Uint8Array(0);
const bufPool = [ new Uint8Array(2), new Uint8Array(2), new Uint8Array(2) ];
let bufPoolIdx = -1;
let bufPoolUsage = 0;
net.connect({
port: this.address().port,
onread: {
buffer: () => {
++bufPoolUsage;
bufPoolIdx = (bufPoolIdx + 1) % bufPool.length;
return bufPool[bufPoolIdx];
},
callback: function(nread, buf) {
assert.strictEqual(buf, bufPool[bufPoolIdx]);
received += nread;
const newIncoming = new Uint8Array(incoming.length + nread);
newIncoming.set(incoming);
newIncoming.set(buf.slice(0, nread), incoming.length);
incoming = newIncoming;
}
}
}).on('data', common.mustNotCall()).on('end', common.mustCall(() => {
assert.strictEqual(received, message.length);
assert.deepStrictEqual(incoming, new Uint8Array(message));
assert.strictEqual(bufPoolUsage, 7);
}));
});
// Test explicit socket pause
net.createServer(common.mustCall(function(socket) {
this.close();
socket.end(message);
})).listen(0, function() {
let received = 0;
const buffers = [];
const sockBuf = Buffer.alloc(8);
let paused = false;
net.connect({
port: this.address().port,
onread: {
buffer: sockBuf,
callback: function(nread, buf) {
assert.strictEqual(paused, false);
assert.strictEqual(buf, sockBuf);
received += nread;
buffers.push(Buffer.from(buf.slice(0, nread)));
paused = true;
this.pause();
setTimeout(() => {
paused = false;
this.resume();
}, 100);
}
}
}).on('data', common.mustNotCall()).on('end', common.mustCall(() => {
assert.strictEqual(received, message.length);
assert.deepStrictEqual(Buffer.concat(buffers), message);
}));
});
// Test implicit socket pause
net.createServer(common.mustCall(function(socket) {
this.close();
socket.end(message);
})).listen(0, function() {
let received = 0;
const buffers = [];
const sockBuf = Buffer.alloc(8);
let paused = false;
net.connect({
port: this.address().port,
onread: {
buffer: sockBuf,
callback: function(nread, buf) {
assert.strictEqual(paused, false);
assert.strictEqual(buf, sockBuf);
received += nread;
buffers.push(Buffer.from(buf.slice(0, nread)));
paused = true;
setTimeout(() => {
paused = false;
this.resume();
}, 100);
return false;
}
}
}).on('data', common.mustNotCall()).on('end', common.mustCall(() => {
assert.strictEqual(received, message.length);
assert.deepStrictEqual(Buffer.concat(buffers), message);
}));
});