dart-lang / dart-lang/http

some errors can't be handled in IOWebSocketChannel.connect

Open
#1,619 10 comments 7 reactions 0 assignees View on GitHub
package:web_socket_channel
Dominant language
Dart
Stars
1.1k
Forks
419
Avg merge
4d 14h
Merged PRs (30d)
8

Description

Copied from https://github.com/flutter/flutter/issues/21076

`IOWebSocketChannel.connect` suffers from the problem described here:

https://www.dartlang.org/guides/libraries/futures-error-handling#potential-problem-failing-to-register-error-handlers-early

When I use `connect` with a URL that can't be resolved (e.g. by having my wifi turned off), then I get an exception that can't be caught by `channel.stream.handleError(onError)`.

All exceptions should be handleable by `stream.handleError`, particularly as this is what the docs promise: "If there's an error connecting, the channel's stream emits a WebSocketChannelException wrapping that error and then closes."

ref: https://docs.flutter.io/flutter/web_socket_channel.io/IOWebSocketChannel/IOWebSocketChannel.connect.html

```
flutter: #0 new IOWebSocketChannel._withoutSocket. (package:web_socket_channel/io.dart:83:24)
dart-lang/http#1604 _invokeErrorHandler (dart:async/async_error.dart:13:29)
dart-lang/web_socket_channel#2 _HandleErrorStream._handleError (dart:async/stream_pipe.dart:286:9)
dart-lang/web_socket_channel#3 _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:168:13)
dart-lang/http#1605 _rootRunBinary (dart:async/zone.dart:1144:38)
dart-lang/web_socket_channel#5 _CustomZone.runBinary (dart:async/zone.dart:1037:19)
dart-lang/web_socket_channel#6 _CustomZone.runBinaryGuarded (dart:async/zone.dart:939:7)
dart-lang/web_socket_channel#7 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:355:15)
dart-lang/web_socket_channel#8 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:373:16)
dart-lang/web_socket_channel#9 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:272:7)
dart-lang/web_socket_channel#10 _SyncStreamController._sendError (dart:async/stream_controller.dart:767:19)
dart-lang/web_socket_channel#11 _StreamController._addError (dart:async/stream_controller.dart:647:7)
dart-lang/web_socket_channel#12 _rootRunBinary (dart:async/zone.dart:1144:38)
```

```
flutter doctor -v
[✓] Flutter (Channel master, v0.7.1-pre.26, on Mac OS X 10.13.6 17G2208, locale en-GB)
• Flutter version 0.7.1-pre.26 at /Users/steve/code/flutter
• Framework revision 510c0eeaff (3 days ago), 2018-08-24 17:19:30 -0700
• Engine revision 0914926014
• Dart version 2.1.0-dev.1.0.flutter-ccb16f7282

[✓] Android toolchain - develop for Android devices (Android SDK 28.0.1)
• Android SDK at /Users/steve/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.1
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)
• All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 9.4.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 9.4.1, Build version 9F2000
• ios-deploy 1.9.2
• CocoaPods version 1.5.3

[✓] Android Studio (version 3.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 26.0.1
• Dart plugin version 173.4700
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)

[✓] VS Code (version 1.26.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 2.17.1

[✓] Connected devices (1 available)
• iPhone X • 1E0393AA-EF50-42AA-A244-3279599BE2C1 • ios • iOS 11.4 (simulator)

• No issues found!
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.