mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(net): set correct max size for Datagram (#21611)
This commit is contained in:
parent
ce7dc2be92
commit
26bf4480ff
2 changed files with 67 additions and 1 deletions
|
@ -28,6 +28,8 @@ import {
|
||||||
op_set_keepalive,
|
op_set_keepalive,
|
||||||
op_set_nodelay,
|
op_set_nodelay,
|
||||||
} from "ext:core/ops";
|
} from "ext:core/ops";
|
||||||
|
const UDP_DGRAM_MAXSIZE = 65507;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
Error,
|
Error,
|
||||||
Number,
|
Number,
|
||||||
|
@ -378,7 +380,7 @@ class DatagramConn {
|
||||||
#unref = false;
|
#unref = false;
|
||||||
#promise = null;
|
#promise = null;
|
||||||
|
|
||||||
constructor(rid, addr, bufSize = 1024) {
|
constructor(rid, addr, bufSize = UDP_DGRAM_MAXSIZE) {
|
||||||
this.#rid = rid;
|
this.#rid = rid;
|
||||||
this.#addr = addr;
|
this.#addr = addr;
|
||||||
this.bufSize = bufSize;
|
this.bufSize = bufSize;
|
||||||
|
|
|
@ -385,6 +385,70 @@ Deno.test(
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Deno.test(
|
||||||
|
{ permissions: { net: true } },
|
||||||
|
async function netUdpSendReceiveTestSizeLimits() {
|
||||||
|
// Ensure payload being sent is within UDP limit, which seems to be 65507
|
||||||
|
// bytes
|
||||||
|
const alice = Deno.listenDatagram({
|
||||||
|
port: listenPort,
|
||||||
|
transport: "udp",
|
||||||
|
hostname: "127.0.0.1",
|
||||||
|
});
|
||||||
|
// wrap this in a try/catch so other tests can continue if we fail
|
||||||
|
// if we don't close here then listening on future tests fails
|
||||||
|
try {
|
||||||
|
assert(alice.addr.transport === "udp");
|
||||||
|
assertEquals(alice.addr.port, listenPort);
|
||||||
|
assertEquals(alice.addr.hostname, "127.0.0.1");
|
||||||
|
} catch (err) {
|
||||||
|
alice.close();
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
const bob = Deno.listenDatagram({
|
||||||
|
port: listenPort2,
|
||||||
|
transport: "udp",
|
||||||
|
hostname: "127.0.0.1",
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
assert(bob.addr.transport === "udp");
|
||||||
|
assertEquals(bob.addr.port, listenPort2);
|
||||||
|
assertEquals(bob.addr.hostname, "127.0.0.1");
|
||||||
|
} catch (err) {
|
||||||
|
bob.close();
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sizes = [0, 1, 2, 256, 1024, 4096, 16384, 65506, 65507, 65508, 65536];
|
||||||
|
const rx = /.+ \(os error \d+\)/;
|
||||||
|
|
||||||
|
for (const size of sizes) {
|
||||||
|
const tosend = new Uint8Array(size);
|
||||||
|
let byteLength = 0;
|
||||||
|
try {
|
||||||
|
byteLength = await alice.send(tosend, bob.addr);
|
||||||
|
} catch (err) {
|
||||||
|
// Note: we have to do the test this way as different OS's have
|
||||||
|
// different UDP size limits enabled, so we will just ensure if
|
||||||
|
// an error is thrown it is the one we are expecting.
|
||||||
|
assert(err.message.match(rx));
|
||||||
|
alice.close();
|
||||||
|
bob.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assertEquals(byteLength, size);
|
||||||
|
const [recvd, remote] = await bob.receive();
|
||||||
|
assert(remote.transport === "udp");
|
||||||
|
assertEquals(remote.port, listenPort);
|
||||||
|
assertEquals(recvd.length, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
alice.close();
|
||||||
|
bob.close();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { net: true }, ignore: true },
|
{ permissions: { net: true }, ignore: true },
|
||||||
async function netUdpSendReceiveBroadcast() {
|
async function netUdpSendReceiveBroadcast() {
|
||||||
|
|
Loading…
Reference in a new issue