From 5a27f0adcd5592a6cc3da73057f3a2dc00b193c6 Mon Sep 17 00:00:00 2001 From: cyan Date: Mon, 22 Sep 2025 01:16:35 -0400 Subject: [PATCH] fix: socket error handling (#2521) * fix: silence unhandled async errors in bitcoin_base fix: wrap all ProxySocket calls in try catch just to be sure * revert to v11 since pr is merged [skip ci] * revert to v11 since pr is merged [skip ci] * revert to v11 since pr is merged [skip ci] * revert to v11 since pr is merged [skip ci] --------- Co-authored-by: Omar Hatem --- cw_bitcoin/pubspec.lock | 2 +- cw_core/lib/utils/proxy_socket/insecure.dart | 31 +++++++++++++++----- cw_core/lib/utils/proxy_socket/secure.dart | 31 +++++++++++++++----- cw_core/lib/utils/proxy_socket/socks.dart | 22 ++++++++++---- 4 files changed, 63 insertions(+), 23 deletions(-) diff --git a/cw_bitcoin/pubspec.lock b/cw_bitcoin/pubspec.lock index 49ee880dc..851ec9c72 100644 --- a/cw_bitcoin/pubspec.lock +++ b/cw_bitcoin/pubspec.lock @@ -93,7 +93,7 @@ packages: dependency: "direct overridden" description: path: "." - ref: cake-update-v11 + ref: "490046a3e074dd7b9aaf7098a5efe61b6246d3b2" resolved-ref: "46e5a2d8a5438cb523a6104b70f5e5125a5663b3" url: "https://github.com/cake-tech/bitcoin_base" source: git diff --git a/cw_core/lib/utils/proxy_socket/insecure.dart b/cw_core/lib/utils/proxy_socket/insecure.dart index 114156fa8..2bcbec8c2 100644 --- a/cw_core/lib/utils/proxy_socket/insecure.dart +++ b/cw_core/lib/utils/proxy_socket/insecure.dart @@ -16,25 +16,40 @@ class ProxySocketInsecure implements ProxySocket { @override Future close() async { + try { if (_isClosed) return; - _isClosed = true; - return socket.close(); + _isClosed = true; + return socket.close(); + } catch (e) { + printV("ProxySocketInsecure: close: $e"); + return; + } } @override void destroy() async { - if (_isClosed) return; - _isClosed = true; - socket.destroy(); + try { + if (_isClosed) return; + _isClosed = true; + socket.destroy(); + } catch (e) { + printV("ProxySocketInsecure: destroy: $e"); + return; + } } @override void write(String data) { - if (_isClosed) { - printV("ProxySocketInsecure: write: socket is closed"); + try { + if (_isClosed) { + printV("ProxySocketInsecure: write: socket is closed"); + return; + } + socket.write(data); + } catch (e) { + printV("ProxySocketInsecure: write: $e"); return; } - socket.write(data); } @override diff --git a/cw_core/lib/utils/proxy_socket/secure.dart b/cw_core/lib/utils/proxy_socket/secure.dart index df7d34e4a..bf499d8ab 100644 --- a/cw_core/lib/utils/proxy_socket/secure.dart +++ b/cw_core/lib/utils/proxy_socket/secure.dart @@ -16,25 +16,40 @@ class ProxySocketSecure implements ProxySocket { @override Future close() async { - if (_isClosed) return; - _isClosed = true; - return socket.close(); + try { + if (_isClosed) return; + _isClosed = true; + return socket.close(); + } catch (e) { + printV("ProxySocketSecure: close: $e"); + return; + } } @override void destroy() async { + try { if (_isClosed) return; - _isClosed = true; - socket.destroy(); + _isClosed = true; + socket.destroy(); + } catch (e) { + printV("ProxySocketSecure: destroy: $e"); + return; + } } @override void write(String data) { - if (_isClosed) { - printV("ProxySocketSecure: write: socket is closed"); + try { + if (_isClosed) { + printV("ProxySocketSecure: write: socket is closed"); + return; + } + socket.write(data); + } catch (e) { + printV("ProxySocketSecure: write: $e"); return; } - socket.write(data); } @override diff --git a/cw_core/lib/utils/proxy_socket/socks.dart b/cw_core/lib/utils/proxy_socket/socks.dart index 4acd216c2..d004f94f8 100644 --- a/cw_core/lib/utils/proxy_socket/socks.dart +++ b/cw_core/lib/utils/proxy_socket/socks.dart @@ -15,9 +15,14 @@ class ProxySocketSocks implements ProxySocket { @override Future close() async { - if (_isClosed) return; - _isClosed = true; - return socket.close(); + try { + if (_isClosed) return; + _isClosed = true; + await socket.close(); + } catch (e) { + printV("ProxySocketSocks: close: $e"); + return; + } } @override @@ -25,11 +30,16 @@ class ProxySocketSocks implements ProxySocket { @override void write(String data) { - if (_isClosed) { - printV("ProxySocketSocks: write: socket is closed"); + try { + if (_isClosed) { + printV("ProxySocketSocks: write: socket is closed"); + return; + } + socket.write(data); + } catch (e) { + printV("ProxySocketSocks: write: $e"); return; } - socket.write(data); } @override