For one, exceptions from streams usually derive from IOException and QuicStream should follow this.
But it also seems reasonable and consistent to have exceptions from QuicConnection/QuicListener derive from IOException as well. In particular, some exceptions are used for both QuicStream and QuicConnection.
Related: #56292 (comment)