Description
Currently, many methods in server::Connection
require exclusive access, which makes it nigh impossible to concurrently use the connection.
This is not a large problem at the moment, as the only function of interest is the Connection::accept
method.
However, when adding support for the H3_DATAGRAM
protocol it is not possible to await datagrams and accept requests on the same connection.
I ran into this issue when implementing webtransport in #183, which requires datagram support.
In addition, webtransport has support for multiple sessions per connection, which in order to support requires that the connection can be used both for accepting webtransport datagrams and streams and accepting new requests such as CONNECT
.
Simply Arc<Mutex<Connection>>
does not solve the issue as the MutexGuard would span an await point on accept.
Making Connection::accept
be async fn accept(&self) -> ...
would solve the issue. Quinn
has a similar api for their accept apis https://docs.rs/quinn/latest/quinn/struct.Connection.html
Is this a change that we are interested in adding? If so, I could work on it.