summaryrefslogtreecommitdiff
path: root/test/parallel/test-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-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-dgram-ipv6only.js')
-rw-r--r--test/parallel/test-dgram-ipv6only.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/test/parallel/test-dgram-ipv6only.js b/test/parallel/test-dgram-ipv6only.js
new file mode 100644
index 0000000000..1187f3084a
--- /dev/null
+++ b/test/parallel/test-dgram-ipv6only.js
@@ -0,0 +1,33 @@
+'use strict';
+
+const common = require('../common');
+if (!common.hasIPv6)
+ common.skip('no IPv6 support');
+
+const dgram = require('dgram');
+
+// This test ensures that dual-stack support is disabled when
+// we specify the `ipv6Only` option in `dgram.createSocket()`.
+const socket = dgram.createSocket({
+ type: 'udp6',
+ ipv6Only: true,
+});
+
+socket.bind({
+ port: 0,
+ address: '::',
+}, common.mustCall(() => {
+ const { port } = socket.address();
+ const client = dgram.createSocket('udp4');
+
+ // We can still bind to '0.0.0.0'.
+ client.bind({
+ port,
+ address: '0.0.0.0',
+ }, common.mustCall(() => {
+ client.close();
+ socket.close();
+ }));
+
+ client.on('error', common.mustNotCall());
+}));