1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-27 21:16:50 +03:00

fix connection reset by peer case (#4626)

* fix connection reset by peer case where pcb is set to null in ClientContext::_error but not reported to WiFiClient

* ClientContext: rename functions *_sent to *_acked (:sent to :ack in debug)

* use nullptr instead of 0
This commit is contained in:
david gauchard 2018-04-12 03:25:04 +02:00 committed by Develo
parent 4305275f8d
commit b08d282673
2 changed files with 9 additions and 9 deletions

View File

@ -280,7 +280,7 @@ void WiFiClient::stop()
uint8_t WiFiClient::connected() uint8_t WiFiClient::connected()
{ {
if (!_client) if (!_client || _client->state() == CLOSED)
return 0; return 0;
return _client->state() == ESTABLISHED || available(); return _client->state() == ESTABLISHED || available();

View File

@ -40,7 +40,7 @@ public:
tcp_setprio(pcb, TCP_PRIO_MIN); tcp_setprio(pcb, TCP_PRIO_MIN);
tcp_arg(pcb, this); tcp_arg(pcb, this);
tcp_recv(pcb, &_s_recv); tcp_recv(pcb, &_s_recv);
tcp_sent(pcb, &_s_sent); tcp_sent(pcb, &_s_acked);
tcp_err(pcb, &_s_error); tcp_err(pcb, &_s_error);
tcp_poll(pcb, &_s_poll, 1); tcp_poll(pcb, &_s_poll, 1);
@ -58,7 +58,7 @@ public:
tcp_err(_pcb, NULL); tcp_err(_pcb, NULL);
tcp_poll(_pcb, NULL, 0); tcp_poll(_pcb, NULL, 0);
tcp_abort(_pcb); tcp_abort(_pcb);
_pcb = 0; _pcb = nullptr;
} }
return ERR_ABRT; return ERR_ABRT;
} }
@ -79,7 +79,7 @@ public:
tcp_abort(_pcb); tcp_abort(_pcb);
err = ERR_ABRT; err = ERR_ABRT;
} }
_pcb = 0; _pcb = nullptr;
} }
return err; return err;
} }
@ -471,11 +471,11 @@ protected:
} }
} }
err_t _sent(tcp_pcb* pcb, uint16_t len) err_t _acked(tcp_pcb* pcb, uint16_t len)
{ {
(void) pcb; (void) pcb;
(void) len; (void) len;
DEBUGV(":sent %d\r\n", len); DEBUGV(":ack %d\r\n", len);
_write_some_from_cb(); _write_some_from_cb();
return ERR_OK; return ERR_OK;
} }
@ -536,7 +536,7 @@ protected:
tcp_sent(_pcb, NULL); tcp_sent(_pcb, NULL);
tcp_recv(_pcb, NULL); tcp_recv(_pcb, NULL);
tcp_err(_pcb, NULL); tcp_err(_pcb, NULL);
_pcb = NULL; _pcb = nullptr;
_notify_error(); _notify_error();
} }
@ -571,9 +571,9 @@ protected:
return reinterpret_cast<ClientContext*>(arg)->_poll(tpcb); return reinterpret_cast<ClientContext*>(arg)->_poll(tpcb);
} }
static err_t _s_sent(void *arg, struct tcp_pcb *tpcb, uint16_t len) static err_t _s_acked(void *arg, struct tcp_pcb *tpcb, uint16_t len)
{ {
return reinterpret_cast<ClientContext*>(arg)->_sent(tpcb, len); return reinterpret_cast<ClientContext*>(arg)->_acked(tpcb, len);
} }
static err_t _s_connected(void* arg, struct tcp_pcb *pcb, err_t err) static err_t _s_connected(void* arg, struct tcp_pcb *pcb, err_t err)