summaryrefslogtreecommitdiff
path: root/test/parallel/test-cluster-dgram-ipv6only.js
diff options
context:
space:
mode:
authorOuyang Yadong <oyydoibh@gmail.com>2018-10-21 15:59:38 +0800
committerOuyang Yadong <oyydoibh@gmail.com>2018-11-22 21:45:08 +0800
commit33a25b29a4d654f5c2a5c74725862bccb2fcccfb (patch)
treea963b15bcba72cabfb317cbb00e47ff33753fbd9 /test/parallel/test-cluster-dgram-ipv6only.js
parent91748dd89c652939d52f38b94afe9eae4eb8fd5d (diff)
downloadandroid-node-v8-33a25b29a4d654f5c2a5c74725862bccb2fcccfb.tar.gz
android-node-v8-33a25b29a4d654f5c2a5c74725862bccb2fcccfb.tar.bz2
android-node-v8-33a25b29a4d654f5c2a5c74725862bccb2fcccfb.zip
net,dgram: add ipv6Only option for net and dgram
For TCP servers, the dual-stack support is enable by default, i.e. binding host "::" will also make "0.0.0.0" bound. This commit add ipv6Only option in `net.Server.listen()` and `dgram.createSocket()` methods which allows to disable dual-stack support. Support for cluster module is also provided in this commit. Fixes: https://github.com/nodejs/node/issues/17664 PR-URL: https://github.com/nodejs/node/pull/23798 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test/parallel/test-cluster-dgram-ipv6only.js')
-rw-r--r--test/parallel/test-cluster-dgram-ipv6only.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/test/parallel/test-cluster-dgram-ipv6only.js b/test/parallel/test-cluster-dgram-ipv6only.js
new file mode 100644
index 0000000000..0906baec92
--- /dev/null
+++ b/test/parallel/test-cluster-dgram-ipv6only.js
@@ -0,0 +1,51 @@
+'use strict';
+
+const common = require('../common');
+if (!common.hasIPv6)
+ common.skip('no IPv6 support');
+if (common.isWindows)
+ common.skip('dgram clustering is currently not supported on windows.');
+
+const assert = require('assert');
+const cluster = require('cluster');
+const dgram = require('dgram');
+
+// This test ensures that the `ipv6Only` option in `dgram.createSock()`
+// works as expected.
+if (cluster.isMaster) {
+ cluster.fork().on('exit', common.mustCall((code) => {
+ assert.strictEqual(code, 0);
+ }));
+} else {
+ let waiting = 2;
+ function close() {
+ if (--waiting === 0)
+ cluster.worker.disconnect();
+ }
+
+ const socket1 = dgram.createSocket({
+ type: 'udp6',
+ ipv6Only: true
+ });
+ const socket2 = dgram.createSocket({
+ type: 'udp4',
+ });
+ socket1.on('error', common.mustNotCall());
+ socket2.on('error', common.mustNotCall());
+
+ socket1.bind({
+ port: 0,
+ address: '::',
+ }, common.mustCall(() => {
+ const { port } = socket1.address();
+ socket2.bind({
+ port,
+ address: '0.0.0.0',
+ }, common.mustCall(() => {
+ process.nextTick(() => {
+ socket1.close(close);
+ socket2.close(close);
+ });
+ }));
+ }));
+}