File tree 1 file changed +24
-4
lines changed
1 file changed +24
-4
lines changed Original file line number Diff line number Diff line change @@ -478,11 +478,31 @@ int NetworkClient::read(uint8_t *buf, size_t size) {
478
478
}
479
479
480
480
size_t NetworkClient::readBytes (char *buffer, size_t length) {
481
- int r = read ((uint8_t *)buffer, length);
482
- if (r < 0 ) {
483
- return 0 ;
481
+ size_t left = length, sofar = 0 ;
482
+ int r = 0 , to = millis () + getTimeout ();
483
+ while (left) {
484
+ r = read ((uint8_t *)buffer+sofar, left);
485
+ if (r < 0 ) {
486
+ // Error has occurred
487
+ break ;
488
+ }
489
+ if (r > 0 ) {
490
+ // We got some data
491
+ left -= r;
492
+ sofar += r;
493
+ to = millis () + getTimeout ();
494
+ } else {
495
+ // We got no data
496
+ if (millis () >= to) {
497
+ // We have waited for data enough
498
+ log_w (" Timeout waiting for data on fd %d" , fd ());
499
+ break ;
500
+ }
501
+ // Allow other tasks to run
502
+ delay (2 );
503
+ }
484
504
}
485
- return ( size_t )r ;
505
+ return sofar ;
486
506
}
487
507
488
508
int NetworkClient::peek () {
You can’t perform that action at this time.
0 commit comments