@@ -136,23 +136,31 @@ class SocketConnector {
136
136
'Added connection. There are now ${connections .length } connections.' ));
137
137
138
138
for (final side in [thisSide, thisSide.farSide! ]) {
139
+ unawaited (side.socket.done
140
+ .then ((v) => _destroySide (side))
141
+ .catchError ((err) => _destroySide (side)));
139
142
if (side.transformer != null ) {
140
143
// transformer is there to transform data originating FROM its side
141
144
StreamController <Uint8List > sc = StreamController <Uint8List >();
142
145
side.farSide! .sink = sc;
143
146
Stream <List <int >> transformed = side.transformer !(sc.stream);
144
- transformed.listen ((event) async {
147
+ transformed.listen ((data) {
145
148
try {
146
- side.farSide! .socket.add (event);
147
- await side.farSide! .socket.flush ();
148
- } catch (e) {
149
+ if (side.farSide! .state == SideState .open) {
150
+ side.farSide! .socket.add (data);
151
+ } else {
152
+ throw StateError (
153
+ 'Will not write to side ${side .farSide !.name } as its state is ${side .farSide !.state }' );
154
+ }
155
+ } catch (e, st) {
149
156
_log ('Failed to write to side ${side .farSide !.name } - closing' ,
150
157
force: true );
158
+ _log ('(Error was $e ; Stack trace follows\n $st ' );
151
159
_destroySide (side.farSide! );
152
160
}
153
161
});
154
162
}
155
- side.stream.listen ((Uint8List data) async {
163
+ side.stream.listen ((Uint8List data) {
156
164
if (logTraffic) {
157
165
final message = String .fromCharCodes (data);
158
166
if (side.isSideA) {
@@ -164,11 +172,16 @@ class SocketConnector {
164
172
}
165
173
}
166
174
try {
167
- side.farSide! .sink.add (data);
168
- await side.farSide! .socket.flush ();
169
- } catch (e) {
175
+ if (side.farSide! .state == SideState .open) {
176
+ side.farSide! .sink.add (data);
177
+ } else {
178
+ throw StateError (
179
+ 'Will not write to side ${side .farSide !.name } as its state is ${side .farSide !.state }' );
180
+ }
181
+ } catch (e, st) {
170
182
_log ('Failed to write to side ${side .farSide !.name } - closing' ,
171
183
force: true );
184
+ _log ('(Error was $e ; Stack trace follows\n $st ' );
172
185
_destroySide (side.farSide! );
173
186
}
174
187
}, onDone: () {
0 commit comments