dgram: add support for UDP connected sockets by santigimeno · Pull Request #26871 · nodejs/node (original) (raw)

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 andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Conversation43 Commits2 Checks0 Files changed

Conversation

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters

[ Show hidden characters]({{ revealButtonHref }})

santigimeno

Added the dgram.connect() and dgram.disconnect() methods that
associate/disassociate a udp socket to/from a remote address.
It optimizes for cases where lots of packets are sent to the same
address.
Also added the dgram.remoteAddress() method to retrieve the associated
remote address.

Checklist

Would like some feedback as I'm not sure about some decisions I made:

Thanks

@nodejs-github-bot

@nodejs-github-bot nodejs-github-bot added c++

Issues and PRs that require attention from people who are familiar with C++.

lib / src

Issues and PRs related to general changes in the lib or src directory.

labels

Mar 22, 2019

@santigimeno

@santigimeno santigimeno added the dgram

Issues and PRs related to the dgram subsystem / UDP.

label

Mar 22, 2019

cjihrig

@reklatsmasters

I think this API shouldn't be a part of nodejs core. There may be some misunderstandings. Some developers may expect messages only from a connected socket, like in tcp, but it's not. You may receive messages from anyone but may send only to an associated address. It's important.

Almost a year ago i solved this problem by creating unicast. This module provided real 1:1 association (for incoming and outgoing messages) and streaming interface.

@santigimeno

@reklatsmasters I think that's actually how a connected UDP socket behaves (and tested locally in linux). From the linux connect(2) manual:

If the socket sockfd is of type SOCK_DGRAM, then addr is the address to which datagrams are sent by default, and the only address from which datagrams are received.

@reklatsmasters

@santigimeno Thanks for the explanation! I researched only the libuv sources.

It would be great to implement a connected UDP socket like a duplex stream.

@santigimeno

Updated to add the review comments. Thanks!

cjihrig

@BridgeAR BridgeAR added the author ready

PRs that have at least one approval, no pending requests for changes, and a CI started.

label

Mar 27, 2019

@nodejs-github-bot

vsemozhetbyt

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some doc nits.

@santigimeno

Updated addressing docs comments. Thanks

@targos

this needs to be rebased.

/cc @nodejs/dgram

@targos targos removed the author ready

PRs that have at least one approval, no pending requests for changes, and a CI started.

label

Mar 30, 2019

@santigimeno

Rebased to current master.

@nodejs-github-bot

@danbev

mcollina

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@BridgeAR BridgeAR added the author ready

PRs that have at least one approval, no pending requests for changes, and a CI started.

label

Apr 1, 2019

@danbev

test/parallel/test-dgram-connect.js seems to be consistently failing on ubuntu.

test/osx failure looks unrelated

console output:

08:22:28 not ok 386 parallel/test-dgram-connect 08:22:28 --- 08:22:28 duration_ms: 0.76 08:22:28 severity: fail 08:22:28 exitcode: 1 08:22:28 stack: |- 08:22:28 assert.js:87 08:22:28 throw new AssertionError(obj); 08:22:28 ^ 08:22:28
08:22:28 AssertionError [ERR_ASSERTION]: Expected values to be strictly equal: 08:22:28 + actual - expected 08:22:28
08:22:28 + 'EAI_AGAIN' 08:22:28 - 'ENOTFOUND' 08:22:28 at /home/iojs/build/workspace/node-test-commit-linux/nodes/ubuntu1804-64/test/parallel/test-dgram-connect.js:40:12 08:22:28 at /home/iojs/build/workspace/node-test-commit-linux/nodes/ubuntu1804-64/test/common/index.js:369:15 08:22:28 at dgram.js:408:9 08:22:28 at processTicksAndRejections (internal/process/task_queues.js:79:9) 08:22:28 ...

@santigimeno

Added the dgram.connect() and dgram.disconnect() methods that associate/disassociate a udp socket to/from a remote address. It optimizes for cases where lots of packets are sent to the same address. Also added the dgram.remoteAddress() method to retrieve the associated remote address.

@santigimeno

@santigimeno

Updated with a test fixup. Thanks!

@nodejs-github-bot

This was referenced

Apr 2, 2019

@danbev

@danbev

danbev pushed a commit that referenced this pull request

Apr 3, 2019

@santigimeno @danbev

Added the dgram.connect() and dgram.disconnect() methods that associate/disassociate a udp socket to/from a remote address. It optimizes for cases where lots of packets are sent to the same address. Also added the dgram.remoteAddress() method to retrieve the associated remote address.

PR-URL: #26871 Reviewed-By: Colin Ihrig cjihrig@gmail.com Reviewed-By: Matteo Collina matteo.collina@gmail.com

BethGriggs pushed a commit that referenced this pull request

Apr 4, 2019

@santigimeno @BethGriggs

Added the dgram.connect() and dgram.disconnect() methods that associate/disassociate a udp socket to/from a remote address. It optimizes for cases where lots of packets are sent to the same address. Also added the dgram.remoteAddress() method to retrieve the associated remote address.

PR-URL: #26871 Reviewed-By: Colin Ihrig cjihrig@gmail.com Reviewed-By: Matteo Collina matteo.collina@gmail.com

This was referenced

Apr 23, 2019

@MylesBorins MylesBorins added the semver-minor

PRs that contain new features and should be released in the next minor version.

label

May 16, 2019

GaryGSC pushed a commit to GaryGSC/node that referenced this pull request

Nov 14, 2019

@santigimeno @GaryGSC

Added the dgram.connect() and dgram.disconnect() methods that associate/disassociate a udp socket to/from a remote address. It optimizes for cases where lots of packets are sent to the same address. Also added the dgram.remoteAddress() method to retrieve the associated remote address.

Backport-PR-URL: nodejs#30480 PR-URL: nodejs#26871 Reviewed-By: Colin Ihrig cjihrig@gmail.com Reviewed-By: Matteo Collina matteo.collina@gmail.com

(cherry picked from commit 9e96017)

@Trott Trott mentioned this pull request

Feb 4, 2022

Labels

author ready

PRs that have at least one approval, no pending requests for changes, and a CI started.

c++

Issues and PRs that require attention from people who are familiar with C++.

dgram

Issues and PRs related to the dgram subsystem / UDP.

lib / src

Issues and PRs related to general changes in the lib or src directory.

semver-minor

PRs that contain new features and should be released in the next minor version.