Closed
Description
Socket
currently has a behavior of throwing SocketError.OperationAborted
for outstanding operations when Dispose()
is called.
We need to decide how Dispose()
will trigger outstanding operations:
QuicListener
-- outstandingAcceptConnection()
calls.QuicConnection
-- outstandingConnect()
,AcceptStream()
,Close()
calls. Plus any already open streams.QuicStream
-- outstandingRead()
,Write()
,Shutdown()
,Abort()
calls.
The current model throws an OperationAbortedException
, mimicing the Socket
API; We should look at how consistent we want to be here, and if we want to adjust for usability/perf reasons, such as having AcceptConnection()
or having AcceptStream()
return null rather than throwing.
We should also consider how this interacts with a user-initiated connection/stream abort, and with a server-initiated connection/stream abort. In sockets, a variety of error codes can be thrown for these, one of them being SocketError.OperationAborted
.