https://stackoverflow.com/questions/32810051/cannot-catch-socketexception/32810079#32810079
https://github.com/dart-lang/sdk/issues/25518
Asynchronous errors can't be caught using try
/catch
(https://www.dartlang.org/docs/tutorials/futures/) at least unless you are using async
/await
(https://www.dartlang.org/articles/await-async/)
See also https://github.com/dart-lang/sdk/issues/24278
You can use the
done
future on theWebSocket
object to get that error, e.g.:import 'dart:async'; import 'dart:io'; main() async { // Connect to a web socket. WebSocket socket = await WebSocket.connect('ws://echo.websocket.org'); // Setup listening. socket.listen((message) { print('message: $message'); }, onError: (error) { print('error: $error'); }, onDone: () { print('socket closed.'); }, cancelOnError: true); // Add message, and then an error. socket.add('echo!'); socket.addError(new Exception('error!')); // Wait for the socket to close. try { await socket.done; print('WebSocket donw'); } catch (error) { print('WebScoket done with error $error'); } }
I get your point, but I don't understand why this is an asynchronous error. I mean, you get this error before starting to actually asynchronously listen to requests, right? – Alexandr Sep 27 '15 at 16:41
1
HttpServer.bind() is already async (returns a Future<HttpServer>) – Günter Zöchbauer Sep 27 '15 at 16:43
You are right, Gunter. Thank you for this! – Alexandr Sep 28 '15 at 5:35