Skip to content

Commit cf6aa1f

Browse files
fix(webtransport): properly handle abruptly closed connections
1 parent 01804d5 commit cf6aa1f

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

Diff for: lib/transports/webtransport.ts

+31-18
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,15 @@ export class WT extends Transport {
3939
this.opts.transportOptions[this.name]
4040
);
4141

42-
this.transport.closed.then(() => this.onClose());
42+
this.transport.closed
43+
.then(() => {
44+
debug("transport closed gracefully");
45+
this.onClose();
46+
})
47+
.catch((err) => {
48+
debug("transport closed due to %s", err);
49+
this.onError("webtransport error", err);
50+
});
4351

4452
// note: we could have used async/await, but that would require some additional polyfills
4553
this.transport.ready.then(() => {
@@ -50,23 +58,28 @@ export class WT extends Transport {
5058
let binaryFlag;
5159

5260
const read = () => {
53-
reader.read().then(({ done, value }) => {
54-
if (done) {
55-
debug("session is closed");
56-
return;
57-
}
58-
debug("received chunk: %o", value);
59-
if (!binaryFlag && value.byteLength === 1 && value[0] === 54) {
60-
binaryFlag = true;
61-
} else {
62-
// TODO expose binarytype
63-
this.onPacket(
64-
decodePacketFromBinary(value, binaryFlag, "arraybuffer")
65-
);
66-
binaryFlag = false;
67-
}
68-
read();
69-
});
61+
reader
62+
.read()
63+
.then(({ done, value }) => {
64+
if (done) {
65+
debug("session is closed");
66+
return;
67+
}
68+
debug("received chunk: %o", value);
69+
if (!binaryFlag && value.byteLength === 1 && value[0] === 54) {
70+
binaryFlag = true;
71+
} else {
72+
// TODO expose binarytype
73+
this.onPacket(
74+
decodePacketFromBinary(value, binaryFlag, "arraybuffer")
75+
);
76+
binaryFlag = false;
77+
}
78+
read();
79+
})
80+
.catch((err) => {
81+
debug("an error occurred while reading: %s", err);
82+
});
7083
};
7184

7285
read();

0 commit comments

Comments
 (0)