mirror of
https://github.com/denoland/deno.git
synced 2024-11-24 15:19:26 -05:00
fix(net): don't try to set nodelay on upgrade streams (#26342)
Fixes https://github.com/denoland/deno/issues/26341. We try to call `op_set_nodelay` on an `UpgradeStream`, which doesn't support that operation.
This commit is contained in:
parent
167f674c7c
commit
a61ba3c699
4 changed files with 26 additions and 5 deletions
|
@ -76,7 +76,11 @@ import {
|
|||
ReadableStreamPrototype,
|
||||
resourceForReadableStream,
|
||||
} from "ext:deno_web/06_streams.js";
|
||||
import { listen, listenOptionApiName, TcpConn } from "ext:deno_net/01_net.js";
|
||||
import {
|
||||
listen,
|
||||
listenOptionApiName,
|
||||
UpgradedConn,
|
||||
} from "ext:deno_net/01_net.js";
|
||||
import { hasTlsKeyPairOptions, listenTls } from "ext:deno_net/02_tls.js";
|
||||
import { SymbolAsyncDispose } from "ext:deno_web/00_infra.js";
|
||||
|
||||
|
@ -189,7 +193,7 @@ class InnerRequest {
|
|||
|
||||
const upgradeRid = op_http_upgrade_raw(external);
|
||||
|
||||
const conn = new TcpConn(
|
||||
const conn = new UpgradedConn(
|
||||
upgradeRid,
|
||||
underlyingConn?.remoteAddr,
|
||||
underlyingConn?.localAddr,
|
||||
|
|
|
@ -194,6 +194,20 @@ class Conn {
|
|||
}
|
||||
}
|
||||
|
||||
class UpgradedConn extends Conn {
|
||||
#rid = 0;
|
||||
|
||||
constructor(rid, remoteAddr, localAddr) {
|
||||
super(rid, remoteAddr, localAddr);
|
||||
ObjectDefineProperty(this, internalRidSymbol, {
|
||||
__proto__: null,
|
||||
enumerable: false,
|
||||
value: rid,
|
||||
});
|
||||
this.#rid = rid;
|
||||
}
|
||||
}
|
||||
|
||||
class TcpConn extends Conn {
|
||||
#rid = 0;
|
||||
|
||||
|
@ -601,5 +615,6 @@ export {
|
|||
resolveDns,
|
||||
TcpConn,
|
||||
UnixConn,
|
||||
UpgradedConn,
|
||||
validatePort,
|
||||
};
|
||||
|
|
|
@ -67,7 +67,7 @@ import { headersEntries } from "ext:deno_fetch/20_headers.js";
|
|||
import { timerId } from "ext:deno_web/03_abort_signal.js";
|
||||
import { clearTimeout as webClearTimeout } from "ext:deno_web/02_timers.js";
|
||||
import { resourceForReadableStream } from "ext:deno_web/06_streams.js";
|
||||
import { TcpConn } from "ext:deno_net/01_net.js";
|
||||
import { UpgradedConn } from "ext:deno_net/01_net.js";
|
||||
import { STATUS_CODES } from "node:_http_server";
|
||||
import { methods as METHODS } from "node:_http_common";
|
||||
|
||||
|
@ -517,7 +517,7 @@ class ClientRequest extends OutgoingMessage {
|
|||
);
|
||||
assert(typeof res.remoteAddrIp !== "undefined");
|
||||
assert(typeof res.remoteAddrIp !== "undefined");
|
||||
const conn = new TcpConn(
|
||||
const conn = new UpgradedConn(
|
||||
upgradeRid,
|
||||
{
|
||||
transport: "tcp",
|
||||
|
|
|
@ -300,7 +300,9 @@ export class TCP extends ConnectionWrap {
|
|||
* @return An error status code.
|
||||
*/
|
||||
setNoDelay(noDelay: boolean): number {
|
||||
this[kStreamBaseField].setNoDelay(noDelay);
|
||||
if ("setNoDelay" in this[kStreamBaseField]) {
|
||||
this[kStreamBaseField].setNoDelay(noDelay);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue