Skip to content

dgram: add synchronous Socket connectSync()#63932

Merged
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
guybedford:dgram-connect-sync
Jun 17, 2026
Merged

dgram: add synchronous Socket connectSync()#63932
nodejs-github-bot merged 2 commits into
nodejs:mainfrom
guybedford:dgram-connect-sync

Conversation

@guybedford

Copy link
Copy Markdown
Contributor

Follow-on to #63838 supporting a similar connectSync API for connect(2) compat.

In Node.js, connect() uses positional arguments so that signature is matched for the sync case here too, unlike bind which accepts an options bag.

Would be nice to include this with the bindSync release to ensure blanket compatibility.

//cc @jasnell @mcollina

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/net

@nodejs-github-bot nodejs-github-bot added dgram Issues and PRs related to the dgram subsystem / UDP. needs-ci PRs that need a full CI run. labels Jun 15, 2026
@guybedford guybedford force-pushed the dgram-connect-sync branch 2 times, most recently from cc1f517 to 9de034a Compare June 15, 2026 22:20
Signed-off-by: Guy Bedford <guybedford@gmail.com>
@guybedford guybedford force-pushed the dgram-connect-sync branch from 9de034a to c360339 Compare June 16, 2026 21:42

@mcollina mcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

lgtm

@mcollina mcollina added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 17, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@guybedford guybedford added author ready PRs that have at least one approval, no pending requests for changes, and a CI started. commit-queue Add this label to land a pull request using GitHub Actions. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. labels Jun 17, 2026
@nodejs-github-bot nodejs-github-bot removed the commit-queue Add this label to land a pull request using GitHub Actions. label Jun 17, 2026
@nodejs-github-bot nodejs-github-bot merged commit eea8d72 into nodejs:main Jun 17, 2026
87 of 88 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in eea8d72

@guybedford guybedford deleted the dgram-connect-sync branch June 17, 2026 19:09
aduh95 pushed a commit that referenced this pull request Jun 18, 2026
Signed-off-by: Guy Bedford <guybedford@gmail.com>
PR-URL: #63932
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
guybedford added a commit to guybedford/emscripten that referenced this pull request Jun 23, 2026
This adds a new `-sNODERAWSOCKETS` setting that for supporting direct full sockets on Node.js via the `node:net` for TCP and `node:dgram` for UDP modules, without needing `ws`, an external proxy process, or pthreads.

* Full support for both outgoing and incoming TCP, using the `node:net` APIs.
* Full support for UDP using the `node:dgram` APIs
* Support for threading, with tests
* Support for IPV6

To support these embeddings without JSPI being mandatory requires using `process.binding('tcp_wrap')` and `process.binding('udp_wrap')` in Node.js, which are used here to support older versions of Node.js.

Further, to avoid having to rely on private APIs in modern Node.js I actually implemented upstream Node.js PRs to make public API surface area available for the full embedding in the following:

* nodejs/node#63838
* nodejs/node#63932
* nodejs/node#63951
* nodejs/node#63825

Then this PR conditionally checks these features and uses the public APIs as defined by them when it is able to, falling back to `tcp_wrap` and `udp_wrap` only when not supported. While Node.js with these features has not yet been released, as soon as all three have landed, we can rely on this surface area for modern 26+ versions of Node.js compat.
guybedford added a commit to guybedford/emscripten that referenced this pull request Jun 23, 2026
This adds a new `-sNODERAWSOCKETS` setting that for supporting direct full sockets on Node.js via the `node:net` for TCP and `node:dgram` for UDP modules, without needing `ws`, an external proxy process, or pthreads.

* Full support for both outgoing and incoming TCP, using the `node:net` APIs.
* Full support for UDP using the `node:dgram` APIs
* Support for threading, with tests
* Support for IPV6

To support these embeddings without JSPI being mandatory requires using `process.binding('tcp_wrap')` and `process.binding('udp_wrap')` in Node.js, which are used here to support older versions of Node.js.

Further, to avoid having to rely on private APIs in modern Node.js I actually implemented upstream Node.js PRs to make public API surface area available for the full embedding in the following:

* nodejs/node#63838
* nodejs/node#63932
* nodejs/node#63951
* nodejs/node#63825

Then this PR conditionally checks these features and uses the public APIs as defined by them when it is able to, falling back to `tcp_wrap` and `udp_wrap` only when not supported. While Node.js with these features has not yet been released, as soon as all three have landed, we can rely on this surface area for modern 26+ versions of Node.js compat.
guybedford added a commit to guybedford/emscripten that referenced this pull request Jun 23, 2026
This adds a new `-sNODERAWSOCKETS` setting that for supporting direct full sockets on Node.js via the `node:net` for TCP and `node:dgram` for UDP modules, without needing `ws`, an external proxy process, or pthreads.

* Full support for both outgoing and incoming TCP, using the `node:net` APIs.
* Full support for UDP using the `node:dgram` APIs
* Support for threading, with tests
* Support for IPV6

To support these embeddings without JSPI being mandatory requires using `process.binding('tcp_wrap')` and `process.binding('udp_wrap')` in Node.js, which are used here to support older versions of Node.js.

Further, to avoid having to rely on private APIs in modern Node.js I actually implemented upstream Node.js PRs to make public API surface area available for the full embedding in the following:

* nodejs/node#63838
* nodejs/node#63932
* nodejs/node#63951
* nodejs/node#63825

Then this PR conditionally checks these features and uses the public APIs as defined by them when it is able to, falling back to `tcp_wrap` and `udp_wrap` only when not supported. While Node.js with these features has not yet been released, as soon as all three have landed, we can rely on this surface area for modern 26+ versions of Node.js compat.
guybedford added a commit to guybedford/emscripten that referenced this pull request Jun 23, 2026
This adds a new `-sNODERAWSOCKETS` setting that for supporting direct full sockets on Node.js via the `node:net` for TCP and `node:dgram` for UDP modules, without needing `ws`, an external proxy process, or pthreads.

* Full support for both outgoing and incoming TCP, using the `node:net` APIs.
* Full support for UDP using the `node:dgram` APIs
* Support for threading, with tests
* Support for IPV6

To support these embeddings without JSPI being mandatory requires using `process.binding('tcp_wrap')` and `process.binding('udp_wrap')` in Node.js, which are used here to support older versions of Node.js.

Further, to avoid having to rely on private APIs in modern Node.js I actually implemented upstream Node.js PRs to make public API surface area available for the full embedding in the following:

* nodejs/node#63838
* nodejs/node#63932
* nodejs/node#63951
* nodejs/node#63825

Then this PR conditionally checks these features and uses the public APIs as defined by them when it is able to, falling back to `tcp_wrap` and `udp_wrap` only when not supported. While Node.js with these features has not yet been released, as soon as all three have landed, we can rely on this surface area for modern 26+ versions of Node.js compat.
guybedford added a commit to guybedford/emscripten that referenced this pull request Jun 23, 2026
This adds a new `-sNODERAWSOCKETS` setting that for supporting direct full sockets on Node.js via the `node:net` for TCP and `node:dgram` for UDP modules, without needing `ws`, an external proxy process, or pthreads.

* Full support for both outgoing and incoming TCP, using the `node:net` APIs.
* Full support for UDP using the `node:dgram` APIs
* Support for threading, with tests
* Support for IPV6

To support these embeddings without JSPI being mandatory requires using `process.binding('tcp_wrap')` and `process.binding('udp_wrap')` in Node.js, which are used here to support older versions of Node.js.

Further, to avoid having to rely on private APIs in modern Node.js I actually implemented upstream Node.js PRs to make public API surface area available for the full embedding in the following:

* nodejs/node#63838
* nodejs/node#63932
* nodejs/node#63951
* nodejs/node#63825

Then this PR conditionally checks these features and uses the public APIs as defined by them when it is able to, falling back to `tcp_wrap` and `udp_wrap` only when not supported. While Node.js with these features has not yet been released, as soon as all three have landed, we can rely on this surface area for modern 26+ versions of Node.js compat.
sbc100 pushed a commit to emscripten-core/emscripten that referenced this pull request Jun 24, 2026
This adds a new `-sNODERAWSOCKETS` setting that for supporting direct
full sockets on Node.js via the `node:net` for TCP and `node:dgram` for
UDP modules, without needing `ws`, an external proxy process, or
pthreads.

* Full support for both outgoing and incoming TCP, using the `node:net` APIs.
* Full support for UDP using the `node:dgram` APIs
* Support for threading, with tests
* Support for IPV6

To support these embeddings without JSPI being mandatory requires using
`process.binding('tcp_wrap')` and `process.binding('udp_wrap')` in
Node.js, which are used here to support older versions of Node.js.

Further, to avoid having to rely on private APIs in modern Node.js I
actually implemented upstream Node.js PRs to make public API surface
area available for the full embedding in the following:

* nodejs/node#63838
* nodejs/node#63932
* nodejs/node#63951
* nodejs/node#63825

Then this PR conditionally checks these features and uses the public
APIs as defined by them when it is able to, falling back to `tcp_wrap`
and `udp_wrap` only when not supported. While Node.js with these
features has not yet been released, as soon as all three have landed, we
can rely on this surface area for modern 26+ versions of Node.js compat.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author ready PRs that have at least one approval, no pending requests for changes, and a CI started. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. dgram Issues and PRs related to the dgram subsystem / UDP. needs-ci PRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants