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 <omarh.ismail1@gmail.com>

cyan committed Sep 22, 2025 at 01:16 UTC 5a27f0adcd5592a6cc3da73057f3a2dc00b193c6
4 files changed +63 -23
cw_bitcoin/pubspec.lock
+1 -1
@@ -93,7 +93,7 @@ packages:
93 dependency: "direct overridden"
94 description:
95 path: "."
96 - ref: cake-update-v11
96 + ref: "490046a3e074dd7b9aaf7098a5efe61b6246d3b2"
97 resolved-ref: "46e5a2d8a5438cb523a6104b70f5e5125a5663b3"
98 url: "https://github.com/cake-tech/bitcoin_base"
99 source: git
cw_core/lib/utils/proxy_socket/insecure.dart
+23 -8
@@ -16,25 +16,40 @@ class ProxySocketInsecure implements ProxySocket {
16
17 @override
18 Future<void> close() async {
19 + try {
20 if (_isClosed) return;
20 - _isClosed = true;
21 - return socket.close();
21 + _isClosed = true;
22 + return socket.close();
23 + } catch (e) {
24 + printV("ProxySocketInsecure: close: $e");
25 + return;
26 + }
27 }
28
29 @override
30 void destroy() async {
26 - if (_isClosed) return;
27 - _isClosed = true;
28 - socket.destroy();
31 + try {
32 + if (_isClosed) return;
33 + _isClosed = true;
34 + socket.destroy();
35 + } catch (e) {
36 + printV("ProxySocketInsecure: destroy: $e");
37 + return;
38 + }
39 }
40
41 @override
42 void write(String data) {
33 - if (_isClosed) {
34 - printV("ProxySocketInsecure: write: socket is closed");
43 + try {
44 + if (_isClosed) {
45 + printV("ProxySocketInsecure: write: socket is closed");
46 + return;
47 + }
48 + socket.write(data);
49 + } catch (e) {
50 + printV("ProxySocketInsecure: write: $e");
51 return;
52 }
37 - socket.write(data);
53 }
54
55 @override
cw_core/lib/utils/proxy_socket/secure.dart
+23 -8
@@ -16,25 +16,40 @@ class ProxySocketSecure implements ProxySocket {
16
17 @override
18 Future<void> close() async {
19 - if (_isClosed) return;
20 - _isClosed = true;
21 - return socket.close();
19 + try {
20 + if (_isClosed) return;
21 + _isClosed = true;
22 + return socket.close();
23 + } catch (e) {
24 + printV("ProxySocketSecure: close: $e");
25 + return;
26 + }
27 }
28
29 @override
30 void destroy() async {
31 + try {
32 if (_isClosed) return;
27 - _isClosed = true;
28 - socket.destroy();
33 + _isClosed = true;
34 + socket.destroy();
35 + } catch (e) {
36 + printV("ProxySocketSecure: destroy: $e");
37 + return;
38 + }
39 }
40
41 @override
42 void write(String data) {
33 - if (_isClosed) {
34 - printV("ProxySocketSecure: write: socket is closed");
43 + try {
44 + if (_isClosed) {
45 + printV("ProxySocketSecure: write: socket is closed");
46 + return;
47 + }
48 + socket.write(data);
49 + } catch (e) {
50 + printV("ProxySocketSecure: write: $e");
51 return;
52 }
37 - socket.write(data);
53 }
54
55 @override
cw_core/lib/utils/proxy_socket/socks.dart
+16 -6
@@ -15,9 +15,14 @@ class ProxySocketSocks implements ProxySocket {
15
16 @override
17 Future<void> close() async {
18 - if (_isClosed) return;
19 - _isClosed = true;
20 - return socket.close();
18 + try {
19 + if (_isClosed) return;
20 + _isClosed = true;
21 + await socket.close();
22 + } catch (e) {
23 + printV("ProxySocketSocks: close: $e");
24 + return;
25 + }
26 }
27
28 @override
@@ -25,11 +30,16 @@ class ProxySocketSocks implements ProxySocket {
30
31 @override
32 void write(String data) {
28 - if (_isClosed) {
29 - printV("ProxySocketSocks: write: socket is closed");
33 + try {
34 + if (_isClosed) {
35 + printV("ProxySocketSocks: write: socket is closed");
36 + return;
37 + }
38 + socket.write(data);
39 + } catch (e) {
40 + printV("ProxySocketSocks: write: $e");
41 return;
42 }
32 - socket.write(data);
43 }
44
45 @override