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