Skip to content

Commit aceae95

Browse files
authored
Update NetworkClient.cpp
1 parent 548c7a0 commit aceae95

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

Diff for: libraries/Network/src/NetworkClient.cpp

+24-4
Original file line numberDiff line numberDiff line change
@@ -478,11 +478,31 @@ int NetworkClient::read(uint8_t *buf, size_t size) {
478478
}
479479

480480
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+
}
484504
}
485-
return (size_t)r;
505+
return sofar;
486506
}
487507

488508
int NetworkClient::peek() {

0 commit comments

Comments
 (0)