'use strict'; const common = require('../common'); const assert = require('assert'); const net = require('net'); // settings const bytes = 1024 * 40; const concurrency = 100; const connections_per_client = 5; // measured let total_connections = 0; const body = 'C'.repeat(bytes); const server = net.createServer(function(c) { console.log('connected'); total_connections++; console.log('#'); c.write(body); c.end(); }); function runClient(callback) { const client = net.createConnection(common.PORT); client.connections = 0; client.setEncoding('utf8'); client.on('connect', function() { console.log('c'); client.recved = ''; client.connections += 1; }); client.on('data', function(chunk) { this.recved += chunk; }); client.on('end', function() { client.end(); }); client.on('error', function(e) { console.log('\n\nERROOOOOr'); throw e; }); client.on('close', function(had_error) { console.log('.'); assert.strictEqual(false, had_error); assert.strictEqual(bytes, client.recved.length); if (client.fd) { console.log(client.fd); } assert.ok(!client.fd); if (this.connections < connections_per_client) { this.connect(common.PORT); } else { callback(); } }); } server.listen(common.PORT, function() { let finished_clients = 0; for (let i = 0; i < concurrency; i++) { runClient(function() { if (++finished_clients === concurrency) server.close(); }); } }); process.on('exit', function() { assert.strictEqual(connections_per_client * concurrency, total_connections); console.log('\nokay!'); });