-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[QUIC] Finalize QUIC dispose model #32142
Comments
What would this do if This is a thorny issue for Having an orderly was for shutting down is quite important as essentially any application must shut down eventually. This issue affects many users of |
I think from a usability point of view, returning null from AcceptConnection or AcceptStream when a local close has happened is the best behavior, even though it's different than the behavior of Socket.Accept. AcceptStream can also fail because of a remote close, either graceful or abortive; I'm less sure what should happen in this case. I think you can make an argument that graceful remote close should result in null from AcceptStream. Abortive remote close probably shouldn't. |
Agreed, this is a good issue. |
I think QuicStream issues are covered under #756. Let's use this issue specifically for QuicConnection and QuicListener. (Or maybe we should open issues for each...) Edit: I do think the AcceptConnection and AcceptStream issues are very similar; we should be consistent here. I think the only other issue then, is Dispose during Connect. Am I missing anything here? |
Meeting notes:
|
Triage: we should investigate for 6.0 whether we're not hanging in case of a disposal and whether we're propagating a correct exception outside of the calls in flight. Some of this is already fixed. |
Socket
currently has a behavior of throwingSocketError.OperationAborted
for outstanding operations whenDispose()
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 theSocket
API; We should look at how consistent we want to be here, and if we want to adjust for usability/perf reasons, such as havingAcceptConnection()
or havingAcceptStream()
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
.The text was updated successfully, but these errors were encountered: