-
Notifications
You must be signed in to change notification settings - Fork 29.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
net,dgram: add ipv6Only option for net and dgram #23798
Conversation
doc/api/net.md
Outdated
@@ -266,6 +266,9 @@ added: v0.11.14 | |||
for all users. **Default:** `false` | |||
* `writableAll` {boolean} For IPC servers makes the pipe writable | |||
for all users. **Default:** `false` | |||
* `ipv6only` {boolean} For TCP servers, setting `ipv6only` to `true` will | |||
disable the dual-stack support, i.e., binding host `::` won't make | |||
`0.0.0.0` be bound. **Default:** `false` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit:
`0.0.0.0` be bound. **Default:** `false` | |
`0.0.0.0` be bound. **Default:** `false`. |
doc/api/net.md
Outdated
@@ -615,6 +618,8 @@ For TCP connections, available `options` are: | |||
**Default:** `4`. | |||
* `hints` {number} Optional [`dns.lookup()` hints][]. | |||
* `lookup` {Function} Custom lookup function. **Default:** [`dns.lookup()`][]. | |||
* `ipv6only` {boolean} Disable the dual-stack support when set to `true`. | |||
**Default:** `false` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit:
**Default:** `false` | |
**Default:** `false`. |
doc/api/net.md
Outdated
@@ -266,6 +266,9 @@ added: v0.11.14 | |||
for all users. **Default:** `false` | |||
* `writableAll` {boolean} For IPC servers makes the pipe writable | |||
for all users. **Default:** `false` | |||
* `ipv6only` {boolean} For TCP servers, setting `ipv6only` to `true` will |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
minor nit: perhaps this should be camel case (ipv6Only
)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Though I prefer ipv6only
here, it's better to follow camel case :)
if (!common.hasIPv6) | ||
common.skip('no IPv6 support'); | ||
|
||
// This test ensures that dual-stack suuport is disabled when |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// This test ensures that dual-stack suuport is disabled when | |
// This test ensures that dual-stack support is disabled when |
291bb1d
to
91e21b2
Compare
port, | ||
host: address, | ||
// Currently, net module only supports `ipv6Only` option in `flags`. | ||
ipv6Only: Boolean(flags | constants.UV_TCP_IPV6ONLY), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks wrong. Boolean(flags | constants.UV_TCP_IPV6ONLY)
is always true. Did you mean to use &
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, a terrible mistake. I'm going to update it and add a test of falsy ipv6Only
scenario.
lib/net.js
Outdated
@@ -98,6 +98,10 @@ const { | |||
|
|||
function noop() {} | |||
|
|||
function getFlags(ipv6Only = false) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused default argument.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The default value of ipv6Only
would be actually undefined
rather than false
which is how its document described. This is the only reason I set the default argument.
PTAL. (Travis ci task for this halted..) |
Thanks for doing this. Would you mind als contributing the same option to UDP / dgram? |
Yes, that's possible. But the last discussion #17664 (comment) shows there is no need to provide the same option to dgram. How do you think about this now? |
doc/api/net.md
Outdated
@@ -266,6 +266,9 @@ added: v0.11.14 | |||
for all users. **Default:** `false` | |||
* `writableAll` {boolean} For IPC servers makes the pipe writable | |||
for all users. **Default:** `false` | |||
* `ipv6Only` {boolean} For TCP servers, setting `ipv6Only` to `true` will | |||
disable the dual-stack support, i.e., binding host `::` won't make |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just "disable dual-stack support", no "the." (And you'd normally say "binding to host", not "binding host".)
// This test ensures that the dual-stack support still works for cluster module | ||
// when `ipv6Only` is not `true`. | ||
const host = '::'; | ||
const WORKER_ACCOUNT = 3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did you mean to write WORKER_COUNT
? The name's a bit confusing to me.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I should have been more careful.
const workers = new Map(); | ||
let address; | ||
|
||
const countdown = new Countdown(WORKER_ACCOUNT, common.mustCall(() => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's unnecessary to wrap the Countdown
callback in a mustCall()
. That's done automatically.
I think I misunderstood the comment #17664 (comment). We could bind to and use unspecified address and it works as expected: exampleconst dgram = require('dgram');
const socket = dgram.createSocket('udp6');
socket.on('message', (msg, rinfo) => {
console.log('rinfo', rinfo)
});
socket.bind(0, '::', () => {
const { port } = socket.address();
const client = dgram.createSocket('udp4');
// Ensure the `client` won't bind ipv6.
client.bind(0, () => {
client.send(Buffer.allocUnsafe(1), port, '0.0.0.0');
});
}); So I would like to add the option to dgram too. |
|
I'd say still go for it. Even if the OS might not properly support the socket option, we can still expose it. |
const workers = new Map(); | ||
let address; | ||
|
||
const countdown = new Countdown(WORKER_ACCOUNT, common.mustCall(() => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: don't need the common.mustCall()
wrapper here.
const workers = new Map(); | ||
let address; | ||
|
||
const countdown = new Countdown(WORKER_ACCOUNT, common.mustCall(() => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: don't need the common.mustCall()
wrapper here.
/ping @silverwind @vsemozhetbyt @mscdex @richardlau @jasnell It should look good now. PTAL. |
Docs LGTM. |
I have no idea why this happened though. |
@nodejs/platform-aix ^^^^^^ |
I suggest removing the support for |
Will you be doing that and rebasing? If not, should we apply a |
I will remove the |
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: nodejs#17664
Resume (for known issues): https://ci.nodejs.org/job/node-test-commit-arm-fanned/4499/ |
I have removed the support for /cc @bnoordhuis @jasnell Does this still LGTY? |
Yes, still LGTM |
Landed in 33a25b2. Thanks! |
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: #17664 PR-URL: #23798 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
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: #17664 PR-URL: #23798 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
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: #17664 PR-URL: #23798 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
Notable Changes: * console,util: * `console` functions now handle symbols as defined in the spec. #23708 * The inspection `depth` default is now back at 2. #24326 * dgram,net: * Added ipv6Only option for `net` and `dgram`. #23798 * http: * Chosing between the http parser is now possible per runtime flag. #24739 * readline: * The `readline` module now supports async iterators. #23916 * repl: * The multiline history feature is removed. #24804 * tls: * Added min/max protocol version options. #24405 * The X.509 public key info now includes the RSA bit size and the elliptic curve. #24358 * url: * `pathToFileURL()` now supports LF, CR and TAB. #23720 * Windows: * Tools are not installed using Boxstarter anymore. #24677 * The install-tools scripts or now included in the dist. #24233 * Added new collaborator: * [antsmartian](https://github.com/antsmartian) - Anto Aravinth. #24655 PR-URL: #24854
Notable Changes: * console,util: * `console` functions now handle symbols as defined in the spec. #23708 * The inspection `depth` default is now back at 2. #24326 * dgram,net: * Added ipv6Only option for `net` and `dgram`. #23798 * http: * Chosing between the http parser is now possible per runtime flag. #24739 * readline: * The `readline` module now supports async iterators. #23916 * repl: * The multiline history feature is removed. #24804 * tls: * Added min/max protocol version options. #24405 * The X.509 public key info now includes the RSA bit size and the elliptic curve. #24358 * url: * `pathToFileURL()` now supports LF, CR and TAB. #23720 * Windows: * Tools are not installed using Boxstarter anymore. #24677 * The install-tools scripts or now included in the dist. #24233 * Added new collaborator: * [antsmartian](https://github.com/antsmartian) - Anto Aravinth. #24655 PR-URL: #24854
Notable Changes: * console,util: * `console` functions now handle symbols as defined in the spec. #23708 * The inspection `depth` default is now back at 2. #24326 * dgram,net: * Added ipv6Only option for `net` and `dgram`. #23798 * http: * Chosing between the http parser is now possible per runtime flag. #24739 * readline: * The `readline` module now supports async iterators. #23916 * repl: * The multiline history feature is removed. #24804 * tls: * Added min/max protocol version options. #24405 * The X.509 public key info now includes the RSA bit size and the elliptic curve. #24358 * url: * `pathToFileURL()` now supports LF, CR and TAB. #23720 * Windows: * Tools are not installed using Boxstarter anymore. #24677 * The install-tools scripts or now included in the dist. #24233 * Added new collaborator: * [antsmartian](https://github.com/antsmartian) - Anto Aravinth. #24655 PR-URL: #24854
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: nodejs#17664 PR-URL: nodejs#23798 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
Notable Changes: * console,util: * `console` functions now handle symbols as defined in the spec. nodejs#23708 * The inspection `depth` default is now back at 2. nodejs#24326 * dgram,net: * Added ipv6Only option for `net` and `dgram`. nodejs#23798 * http: * Chosing between the http parser is now possible per runtime flag. nodejs#24739 * readline: * The `readline` module now supports async iterators. nodejs#23916 * repl: * The multiline history feature is removed. nodejs#24804 * tls: * Added min/max protocol version options. nodejs#24405 * The X.509 public key info now includes the RSA bit size and the elliptic curve. nodejs#24358 * url: * `pathToFileURL()` now supports LF, CR and TAB. nodejs#23720 * Windows: * Tools are not installed using Boxstarter anymore. nodejs#24677 * The install-tools scripts or now included in the dist. nodejs#24233 * Added new collaborator: * [antsmartian](https://github.com/antsmartian) - Anto Aravinth. nodejs#24655 PR-URL: nodejs#24854
For our 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()
,net.Socket.connect()
anddgram.createSocket()
methods which allows to disable dual-stack support.Support for cluster module is also provided in this commit.
Fixes: #17664
/cc @silverwind
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passes