mirror of
https://github.com/denoland/deno.git
synced 2025-07-07 21:35:07 +00:00
fix(ext/node): implement dgram setMulticastLoopback (#29241)
`npm:multicast-dns` works in Deno now. Ref https://github.com/denoland/deno/issues/18324
This commit is contained in:
parent
e601df6bfb
commit
9cb72064d3
5 changed files with 54 additions and 5 deletions
|
@ -378,14 +378,19 @@ class Listener {
|
|||
}
|
||||
}
|
||||
|
||||
const _setBroadcast = Symbol("setBroadcast");
|
||||
const _dropMembership = Symbol("dropMembership");
|
||||
const _setBroadcast = Symbol("setBroadcast");
|
||||
const _setMultiLoopback = Symbol("setMultiLoopback");
|
||||
const _setMulticastTTL = Symbol("setMulticastTTL");
|
||||
|
||||
function setDatagramBroadcast(conn, broadcast) {
|
||||
return conn[_setBroadcast](broadcast);
|
||||
}
|
||||
|
||||
function setMulticastLoopback(conn, v6, loopback) {
|
||||
return conn[_setMultiLoopback](v6, loopback);
|
||||
}
|
||||
|
||||
function dropMembership(conn, v6, addr, multiInterface) {
|
||||
return conn[_dropMembership](v6, addr, multiInterface);
|
||||
}
|
||||
|
@ -426,6 +431,10 @@ class DatagramConn {
|
|||
return op_net_set_multi_ttl_udp(this.#rid, ttl);
|
||||
}
|
||||
|
||||
[_setMultiLoopback](v6, loopback) {
|
||||
return op_net_set_multi_loopback_udp(this.#rid, !v6, loopback);
|
||||
}
|
||||
|
||||
async joinMulticastV4(addr, multiInterface) {
|
||||
await op_net_join_multi_v4_udp(
|
||||
this.#rid,
|
||||
|
@ -723,6 +732,7 @@ export {
|
|||
listenOptionApiName,
|
||||
resolveDns,
|
||||
setDatagramBroadcast,
|
||||
setMulticastLoopback,
|
||||
setMulticastTTL,
|
||||
TcpConn,
|
||||
UnixConn,
|
||||
|
|
|
@ -360,8 +360,17 @@ export class UDP extends HandleWrap {
|
|||
notImplemented("udp.UDP.prototype.setMulticastInterface");
|
||||
}
|
||||
|
||||
setMulticastLoopback(_bool: 0 | 1): number {
|
||||
notImplemented("udp.UDP.prototype.setMulticastLoopback");
|
||||
setMulticastLoopback(bool: 0 | 1): number {
|
||||
if (!this.#listener) {
|
||||
return codeMap.get("EBADF")!;
|
||||
}
|
||||
|
||||
net.setMulticastLoopback(
|
||||
this.#listener,
|
||||
this.#family === "IPv6",
|
||||
bool === 1,
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
setMulticastTTL(ttl: number): number {
|
||||
|
|
|
@ -429,6 +429,7 @@
|
|||
"test-dgram-listen-after-bind.js",
|
||||
"test-dgram-membership.js",
|
||||
"test-dgram-msgsize.js",
|
||||
"test-dgram-multicast-loopback.js",
|
||||
"test-dgram-multicast-setTTL.js",
|
||||
"test-dgram-oob-buffer.js",
|
||||
"test-dgram-recv-error.js",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!-- deno-fmt-ignore-file -->
|
||||
# Remaining Node Tests
|
||||
|
||||
1167 tests out of 3993 have been ported from Node 23.9.0 (29.23% ported, 71.30% remaining).
|
||||
1168 tests out of 3993 have been ported from Node 23.9.0 (29.25% ported, 71.27% remaining).
|
||||
|
||||
NOTE: This file should not be manually edited. Please edit `tests/node_compat/config.json` and run `deno task setup` in `tests/node_compat/runner` dir instead.
|
||||
|
||||
|
@ -614,7 +614,6 @@ NOTE: This file should not be manually edited. Please edit `tests/node_compat/co
|
|||
- [parallel/test-dgram-create-socket-handle.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-dgram-create-socket-handle.js)
|
||||
- [parallel/test-dgram-deprecation-error.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-dgram-deprecation-error.js)
|
||||
- [parallel/test-dgram-exclusive-implicit-bind.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-dgram-exclusive-implicit-bind.js)
|
||||
- [parallel/test-dgram-multicast-loopback.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-dgram-multicast-loopback.js)
|
||||
- [parallel/test-dgram-multicast-set-interface.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-dgram-multicast-set-interface.js)
|
||||
- [parallel/test-dgram-reuseport.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-dgram-reuseport.js)
|
||||
- [parallel/test-dgram-send-address-types.js](https://github.com/nodejs/node/tree/v23.9.0/test/parallel/test-dgram-send-address-types.js)
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// deno-fmt-ignore-file
|
||||
// deno-lint-ignore-file
|
||||
|
||||
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
||||
// Taken from Node 23.9.0
|
||||
// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
|
||||
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const dgram = require('dgram');
|
||||
|
||||
{
|
||||
const socket = dgram.createSocket('udp4');
|
||||
|
||||
assert.throws(() => {
|
||||
socket.setMulticastLoopback(16);
|
||||
}, /^Error: setMulticastLoopback EBADF$/);
|
||||
}
|
||||
|
||||
{
|
||||
const socket = dgram.createSocket('udp4');
|
||||
|
||||
socket.bind(0);
|
||||
socket.on('listening', common.mustCall(() => {
|
||||
assert.strictEqual(socket.setMulticastLoopback(16), 16);
|
||||
assert.strictEqual(socket.setMulticastLoopback(0), 0);
|
||||
socket.close();
|
||||
}));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue