current commit
260728.6 · net: add experimental net/promises API
'use strict';
const common = require('../common');
const assert = require('assert');
const net = require('net');
const { once } = require('events');

(async () => {
  // `for await...of` yields each incoming connection as a net.Socket.
  {
    const server = net.createServer().listen(0);
    await once(server, 'listening');
    const { port } = server.address();

    const total = 3;
    const clients = [];
    for (let i = 0; i < total; i++) {
      clients.push(net.connect(port));
    }

    let count = 0;
    for await (const socket of server) {
      assert.ok(socket instanceof net.Socket);
      socket.end();
      if (++count === total) break;
    }
    assert.strictEqual(count, total);

    // Breaking out of the loop stops iterating but does not close the server.
    assert.strictEqual(server.listening, true);

    server.close();
    for (const client of clients) {
      client.destroy();
    }
  }

  // Iteration ends cleanly when the server closes.
  {
    const server = net.createServer().listen(0);
    await once(server, 'listening');
    process.nextTick(() => server.close());

    let count = 0;
    for await (const socket of server) {
      count++;
      socket.end();
    }
    assert.strictEqual(count, 0);
  }
})().then(common.mustCall());