Alternative Improve _uploadReadByte (#2656)

* add opportunity for more than one retry to _uploadReadByte

* an alternative timeout-based method to making _uploadReadByte more resilient

* move timing variables in the correct scope

* implement and use client.getTimeout instead of hard-coded timeout in _uploadReadByte

* add missing return

* some refactoring to address respecting the timeout in a potentially deadlocked connection

* fix spelling in comment

* address review comments; move impl to cpp file for getTimeout, and remove local variable for currentMillis

* remove redundant cast

* need to check for timeout outside the inner while as well

* update WebUpdate example to print something in unexpected callback condition

* update log_e messages per review comments
This commit is contained in:
Victor Aprea
2019-04-12 06:45:35 -04:00
committed by Me No Dev
parent e0beac88c9
commit 25c0b52212
5 changed files with 47 additions and 12 deletions

View File

@ -279,7 +279,7 @@ int WiFiClient::setOption(int option, int *value)
{
int res = setsockopt(fd(), IPPROTO_TCP, option, (char *) value, sizeof(int));
if(res < 0) {
log_e("%d", errno);
log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, esp_err_to_name(errno));
}
return res;
}
@ -289,7 +289,7 @@ int WiFiClient::getOption(int option, int *value)
size_t size = sizeof(int);
int res = getsockopt(fd(), IPPROTO_TCP, option, (char *)value, &size);
if(res < 0) {
log_e("%d", errno);
log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, esp_err_to_name(errno));
}
return res;
}
@ -362,7 +362,7 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size)
}
}
else if(res < 0) {
log_e("%d", errno);
log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, esp_err_to_name(errno));
if(errno != EAGAIN) {
//if resource was busy, can try again, otherwise give up
stop();
@ -406,7 +406,7 @@ int WiFiClient::read(uint8_t *buf, size_t size)
int res = -1;
res = _rxBuffer->read(buf, size);
if(_rxBuffer->failed()) {
log_e("%d", errno);
log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, esp_err_to_name(errno));
stop();
}
return res;
@ -416,7 +416,7 @@ int WiFiClient::peek()
{
int res = _rxBuffer->peek();
if(_rxBuffer->failed()) {
log_e("%d", errno);
log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, esp_err_to_name(errno));
stop();
}
return res;
@ -430,7 +430,7 @@ int WiFiClient::available()
}
int res = _rxBuffer->available();
if(_rxBuffer->failed()) {
log_e("%d", errno);
log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, esp_err_to_name(errno));
stop();
}
return res;
@ -452,7 +452,7 @@ void WiFiClient::flush() {
toRead = (a>WIFI_CLIENT_FLUSH_BUFFER_SIZE)?WIFI_CLIENT_FLUSH_BUFFER_SIZE:a;
res = recv(fd(), buf, toRead, MSG_DONTWAIT);
if(res < 0) {
log_e("%d", errno);
log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, esp_err_to_name(errno));
stop();
break;
}