hyperium / hyperium/h3

Streams should be reset when the RequestStream dropped

Open
#262 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

E-medium
Dominant language
Rust
Stars
890
Forks
136
Avg merge
14d 20h
Merged PRs (30d)
2

Description

See the rfc:

Implementations SHOULD cancel requests by abruptly terminating any directions of a stream
 that are still open. To do so, an implementation resets the sending parts of streams and
 aborts reading on the receiving parts of streams; see [Section 2.4](https://www.rfc-
editor.org/rfc/rfc9000#section-2.4) of [[QUIC-TRANSPORT]
(https://datatracker.ietf.org/doc/html/rfc9000)].

In many cases, The request stream will be dropped directly. For example in reqwest, if total timeout occurs, The entire future that sends the request will be dropped.

We are writing a quic implementation and also using it.

In our implementation, if the application layer drop the stream before the sender or.and receiver sides of the stream are reset or complete, The program will panic directly.

We stand by this. It is no longer possible for the application layer to read and write on the stream, but the stream has not ended. This is unreasonable.

This does bring us a lot of trouble, especially when using the reqwest library. Because h3 does not implement a SHOULD in rfc.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No files, tests, or entry points are named. Start by tracing RequestStream drop handling and the sender and receiver reset paths, then compare the behavior with RFC 9114 section 4.1.1 and reproduce the reported panic. Done means dropping an incomplete request stream resets or aborts its open directions without a panic.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.