1'use strict';
2const common = require('../common');
3const http = require('http');
4const cluster = require('cluster');
5const assert = require('assert');
6
7cluster.schedulingPolicy = cluster.SCHED_NONE;
8
9const server = http.createServer();
10if (cluster.isPrimary) {
11  let worker;
12
13  server.listen(0, common.mustSucceed(() => {
14    assert(worker);
15
16    worker.send({ port: server.address().port });
17  }));
18
19  worker = cluster.fork();
20  worker.on('exit', common.mustCall(() => {
21    server.close();
22  }));
23} else {
24  process.on('message', common.mustCall((msg) => {
25    assert(msg.port);
26
27    server.listen(msg.port);
28    server.on('error', common.mustCall((e) => {
29      cluster.worker.disconnect();
30    }));
31  }));
32}
33