@@ -216,6 +216,9 @@ actor TCPConnection
216
216
217
217
let _read_buffer_size: USize
218
218
219
+ let _yield_after_reading: USize
220
+ let _yield_after_writing: USize
221
+
219
222
var _expect: USize = 0
220
223
221
224
var _muted: Bool = false
@@ -226,14 +229,18 @@ actor TCPConnection
226
229
host: String ,
227
230
service: String ,
228
231
from: String = " " ,
229
- read_buffer_size: USize = 16384 )
232
+ read_buffer_size: USize = 16384 ,
233
+ yield_after_reading: USize = 16384 ,
234
+ yield_after_writing: USize = 16384 )
230
235
=>
231
236
"""
232
237
Connect via IPv4 or IPv6. If `from` is a non-empty string, the connection
233
238
will be made from the specified interface.
234
239
"""
235
240
_read_buf = recover Array [U8 ] .> undefined (read_buffer_size) end
236
241
_read_buffer_size = read_buffer_size
242
+ _yield_after_reading = yield_after_reading
243
+ _yield_after_writing = yield_after_writing
237
244
_notify = consume notify
238
245
let asio_flags =
239
246
ifdef not windows then
@@ -252,13 +259,17 @@ actor TCPConnection
252
259
host: String ,
253
260
service: String ,
254
261
from: String = " " ,
255
- read_buffer_size: USize = 16384 )
262
+ read_buffer_size: USize = 16384 ,
263
+ yield_after_reading: USize = 16384 ,
264
+ yield_after_writing: USize = 16384 )
256
265
=>
257
266
"""
258
267
Connect via IPv4.
259
268
"""
260
269
_read_buf = recover Array [U8 ] .> undefined (read_buffer_size) end
261
270
_read_buffer_size = read_buffer_size
271
+ _yield_after_reading = yield_after_reading
272
+ _yield_after_writing = yield_after_writing
262
273
_notify = consume notify
263
274
let asio_flags =
264
275
ifdef not windows then
@@ -277,13 +288,17 @@ actor TCPConnection
277
288
host: String ,
278
289
service: String ,
279
290
from: String = " " ,
280
- read_buffer_size: USize = 16384 )
291
+ read_buffer_size: USize = 16384 ,
292
+ yield_after_reading: USize = 16384 ,
293
+ yield_after_writing: USize = 16384 )
281
294
=>
282
295
"""
283
296
Connect via IPv6.
284
297
"""
285
298
_read_buf = recover Array [U8 ] .> undefined (read_buffer_size) end
286
299
_read_buffer_size = read_buffer_size
300
+ _yield_after_reading = yield_after_reading
301
+ _yield_after_writing = yield_after_writing
287
302
_notify = consume notify
288
303
let asio_flags =
289
304
ifdef not windows then
@@ -300,7 +315,9 @@ actor TCPConnection
300
315
listen: TCPListener ,
301
316
notify: TCPConnectionNotify iso ,
302
317
fd: U32 ,
303
- read_buffer_size: USize = 16384 )
318
+ read_buffer_size: USize = 16384 ,
319
+ yield_after_reading: USize = 16384 ,
320
+ yield_after_writing: USize = 16384 )
304
321
=>
305
322
"""
306
323
A new connection accepted on a server.
@@ -323,6 +340,8 @@ actor TCPConnection
323
340
_writeable = true
324
341
_read_buf = recover Array [U8 ] .> undefined (read_buffer_size) end
325
342
_read_buffer_size = read_buffer_size
343
+ _yield_after_reading = yield_after_reading
344
+ _yield_after_writing = yield_after_writing
326
345
327
346
_notify.accepted (this )
328
347
@@ -648,7 +667,9 @@ actor TCPConnection
648
667
var bytes_to_send: USize = 0
649
668
var bytes_sent: USize = 0
650
669
while _writeable and (_pending_writev_total > 0 ) do
651
- if bytes_sent >= _read_buffer_size then
670
+ if bytes_sent >= _yield_after_writing then
671
+ // We've written _yield_after_writing bytes.
672
+ // Yield and write again later.
652
673
_write_again ()
653
674
return false
654
675
end
@@ -861,8 +882,9 @@ actor TCPConnection
861
882
end
862
883
end
863
884
864
- if sum >= _read_buffer_size then
865
- // If we've read _read_buffer_size, yield and read again later.
885
+ if sum >= _yield_after_reading then
886
+ // If we've read _yield_after_reading bytes
887
+ // yield and read again later.
866
888
_read_buf_size ()
867
889
_read_again ()
868
890
_reading = false
0 commit comments