1'use strict'; 2 3const common = require('../common'); 4const assert = require('assert'); 5const cluster = require('cluster'); 6const net = require('net'); 7 8assert.throws(() => { 9 new net.Socket({ fd: -1 }); 10}, { code: 'ERR_OUT_OF_RANGE' }); 11 12assert.throws(() => { 13 new net.Socket({ fd: 'foo' }); 14}, { code: 'ERR_INVALID_ARG_TYPE' }); 15 16function test(sock, readable, writable) { 17 let socket; 18 if (sock instanceof net.Socket) { 19 socket = sock; 20 } else { 21 socket = new net.Socket(sock); 22 socket.unref(); 23 } 24 25 assert.strictEqual(socket.readable, readable); 26 assert.strictEqual(socket.writable, writable); 27} 28 29if (cluster.isMaster) { 30 test(undefined, true, true); 31 32 const server = net.createServer(common.mustCall((socket) => { 33 socket.unref(); 34 test(socket, true, true); 35 test({ handle: socket._handle }, true, true); 36 test({ handle: socket._handle, readable: true, writable: true }, 37 true, true); 38 server.close(); 39 })); 40 41 server.listen(common.mustCall(() => { 42 const { port } = server.address(); 43 const socket = net.connect(port, common.mustCall(() => { 44 test(socket, true, true); 45 socket.end(); 46 })); 47 48 test(socket, true, true); 49 })); 50 51 cluster.setupMaster({ 52 stdio: ['pipe', 'pipe', 'pipe', 'ipc', 'pipe', 'pipe', 'pipe'] 53 }); 54 55 const worker = cluster.fork(); 56 worker.on('exit', common.mustCall((code, signal) => { 57 assert.strictEqual(code, 0); 58 assert.strictEqual(signal, null); 59 })); 60} else { 61 test(4, true, true); 62 test({ fd: 5 }, true, true); 63 test({ fd: 6, readable: true, writable: true }, true, true); 64 process.disconnect(); 65} 66