| // Flags: --expose-internals |
| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const cluster = require('cluster'); |
| const dgram = require('dgram'); |
| const { internalBinding } = require('internal/test/binding'); |
| const { UV_UNKNOWN } = internalBinding('uv'); |
| |
| if (cluster.isPrimary) { |
| cluster.fork(); |
| } else { |
| // When the socket attempts to bind, it requests a handle from the cluster. |
| // Force the cluster to send back an error code. |
| cluster._getServer = function(self, options, callback) { |
| callback(UV_UNKNOWN); |
| }; |
| |
| const socket = dgram.createSocket('udp4'); |
| |
| socket.on('error', common.mustCall((err) => { |
| assert.match(err.toString(), /^Error: bind UNKNOWN 0\.0\.0\.0$/); |
| process.nextTick(common.mustCall(() => { |
| assert.strictEqual(socket._bindState, 0); // BIND_STATE_UNBOUND |
| socket.close(); |
| cluster.worker.disconnect(); |
| })); |
| })); |
| |
| socket.bind(common.mustNotCall('Socket should not bind.')); |
| } |