-
-
Notifications
You must be signed in to change notification settings - Fork 31
Description
In trio-websocket, when running as a client, connecting to a server using SSL: Because SSL connection happens during the initial handshake, if there is an SSL issue such as a failure to validate the server's certificate, Trio's SSL connection will be set to _state.BROKEN and trio-websocket's reader_task will exit, but because the exception is translated to ConnectionClosed by _send
the reader_task
will exit normally and the nursery will stick around, meaning the connection will time out rather than immediately exit.
It's fixable by doing something unpleasant like this in _send
's exception handler:
if isinstance(exc.__cause__, _stdlib_ssl.CertificateError):
raise exc.__cause__
But that's a bit unpleasant. I tried instead having reader_task
's _initial_request handler re-raise the exception, but that seems too broad.
Any thoughts? Happy to write something. I'm hitting this issue because a client running on Windows is sometimes unable to validate certificates, and it would be useful to know early rather than waiting for a connection timeout (which also obscures the cause of the error).