fix(websocket): Implement proactive closure detection for WebSocket transport #1083
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #1082
This PR implements proactive closure detection and graceful EOF handling for WebSocket transport, similar to rust-v0.54+. This fixes WebSocket transport interoperability failures with other libp2p implementations (Nim, JVM, rust-v0.53).
Changes
IOExceptioninstead of returning empty bytes when connection closes, allowing immediate detectionconn_state()methodProblem
Python's WebSocket transport detected connection closure reactively (during operations) rather than proactively (through stream polling). When a peer closed the WebSocket connection:
connection.py:read()returnedb""instead of raising an exceptionread_exactly()retried 100 times thinking it's "no data yet"IncompleteReadErrorwithout transport contextSolution
This PR implements the same approach as rust-v0.54+: raise
IOExceptionimmediately when WebSocket connection closes, with enhanced error messages that include:Testing
Related to PR #964 but independent implementation with tests.