| 'use strict'; |
| const common = require('../common'); |
| // Skip test in FreeBSD jails |
| if (common.inFreeBSDJail) |
| common.skip('In a FreeBSD jail'); |
| |
| const assert = require('assert'); |
| const net = require('net'); |
| |
| let conns = 0; |
| const clientLocalPorts = []; |
| const serverRemotePorts = []; |
| const client = new net.Socket(); |
| const server = net.createServer((socket) => { |
| serverRemotePorts.push(socket.remotePort); |
| socket.end(); |
| }); |
| |
| server.on('close', common.mustCall(() => { |
| // Client and server should agree on the ports used |
| assert.deepStrictEqual(serverRemotePorts, clientLocalPorts); |
| assert.strictEqual(conns, 2); |
| })); |
| |
| server.listen(0, common.localhostIPv4, connect); |
| |
| function connect() { |
| if (conns === 2) { |
| server.close(); |
| return; |
| } |
| |
| conns++; |
| client.once('close', connect); |
| assert.strictEqual( |
| client, |
| client.connect(server.address().port, common.localhostIPv4, () => { |
| clientLocalPorts.push(client.localPort); |
| }) |
| ); |
| } |