Session

A WebTransport Session functions similarly to a QUIC Connection, enabling the opening and accepting of streams, as well as the sending and receiving of datagrams.

The API of webtransport.Session is almost identical to that of quic.Connection, with a few minor differences: For example, QUIC allows streams to be reset using a 62-bit error code, whereas WebTransport limits the error code range to 32 bits.

Closing a WebTransport Session

The WebTransport session can be closed by calling the CloseWithError method:

sess.CloseWithError(1234, "please stop talking to me 🤐")

Similar to closing a quic.Connection, this action causes all calls to AcceptStream and OpenStream, as well as stream Read and Write calls, to return immediately.

⚠️
CloseWithError only closes the WebTransport session, but not the underlying QUIC connection.

On the receiver side, this error will be surfaced as a webtransport.SessionError:

var sessErr *webtransport.SessionError
if errors.As(err, &sessErr) {
  errorCode := sessErr.ErrorCode
  errorMessage := sessErr.Message
}

Additionally, the underlying QUIC connection might close for various reasons, potentially triggering any of the errors detailed in the error assertion section.

📝 Future Work

  • WebTransport Datagrams: #8