diff --git a/index.bs b/index.bs
index 896f903e..3941da52 100644
--- a/index.bs
+++ b/index.bs
@@ -79,6 +79,7 @@ urlPrefix: http://www.ecma-international.org/ecma-262/6.0/index.html; spec: ECMA
text: pending; url: sec-promise-objects
text: resolved; url: sec-promise-objects
text: settled; url: sec-promise-objects
+ text: the typed array constructors table; url: #table-49
urlPrefix: https://heycam.github.io/webidl/; spec: WEBIDL
type: dfn
text: created; for:DOMException; url: dfn-create-exception
@@ -478,9 +479,18 @@ To pullDatagrams, given a {{WebTransport}} object |transport|, run th
1. If |queue| is empty, then:
1. Set |datagrams|.{{[[IncomingDatagramsPullPromise]]}} to a new promise.
1. Return |datagrams|.{{[[IncomingDatagramsPullPromise]]}}.
-1. Let |bytes| and |timestamp| be the result of [=dequeuing=] |queue|.
-1. Let |chunk| be a new {{Uint8Array}} object representing |bytes|.
-1. [=ReadableStream/Enqueue=] |chunk| to |transport|.{{[[Datagrams]]}}.{{WebTransportDatagramDuplexStream/[[Readable]]}}.
+1. Let |datagram| and |timestamp| be the result of [=dequeuing=] |queue|.
+1. If |datagrams|.{{WebTransportDatagramDuplexStream/[[Readable]]}}'s
+ [=ReadableStream/current BYOB request view=] is not null, then:
+ 1. Let |view| be |datagrams|.{{WebTransportDatagramDuplexStream/[[Readable]]}}'s
+ [=ReadableStream/current BYOB request view=].
+ 1. If |view|'s [=BufferSource/byte length=] is less than the size of |datagram|, return
+ [=a promise rejected with=] a {{RangeError}}.
+ 1. Let |elementSize| be the element size specified in [=the typed array constructors table=] for
+ |view|.\[[TypedArrayName]]. If |view| does not have a \[[TypedArrayName]] internal slot
+ (i.e. it is a {{DataView}}), let |elementSize| be 0.
+ 1. If |elementSize| is not 1, return [=a promise rejected with=] a {{TypeError}}.
+1. [=ReadableStream/Pull from bytes=] |datagram| into |datagrams|.{{WebTransportDatagramDuplexStream/[[Readable]]}}.
1. Return [=a promise resolved with=] undefined.
To receiveDatagrams, given a {{WebTransport}} object |transport|, run these steps:
@@ -743,8 +753,15 @@ agent MUST run the following steps:
:: null
1. Let |pullDatagramsAlgorithm| be an action that runs [=pullDatagrams=] with |transport|.
1. Let |writeDatagramsAlgorithm| be an action that runs [=writeDatagrams=] with |transport|.
-1. [=ReadableStream/Set up=] |incomingDatagrams| with [=ReadableStream/set up/pullAlgorithm=]
- set to |pullDatagramsAlgorithm|, and [=ReadableStream/set up/highWaterMark=] set to 0.
+
+Note: Using 64kB buffers with datagrams is recommended because the effective
+maximum WebTransport datagram frame size has an upper bound of the QUIC maximum datagram frame size
+which is recommended to be 64kB (See [[!QUIC-DATAGRAM]] [Section 3](https://datatracker.ietf.org/doc/html/rfc9221#section-3)).
+This will ensure the stream is not errored due to a datagram being larger than the buffer.
+
+1. [=ReadableStream/Set up with byte reading support=] |incomingDatagrams| with
+ [=ReadableStream/set up with byte reading support/pullAlgorithm=] set to
+ |pullDatagramsAlgorithm|, and [=ReadableStream/set up/highWaterMark=] set to 0.
1. [=WritableStream/Set up=] |outgoingDatagrams| with [=WritableStream/set up/writeAlgorithm=]
set to |writeDatagramsAlgorithm|.
1. Let |pullBidirectionalStreamAlgorithm| be an action that runs [=pullBidirectionalStream=]