Linux: Fix stability problem with ethernet (#1091)
- Fix a problem where mysgw stops working and consumes a lot of cpu. - Fix bug with tcp sockets where socket descriptor wasn't being freed.
This commit is contained in:
committed by
Mikael Falkvidd
parent
2175c993ef
commit
ea6d07cb79
@@ -220,9 +220,8 @@ void EthernetClient::stop()
|
|||||||
gettimeofday(&startTime, NULL);
|
gettimeofday(&startTime, NULL);
|
||||||
|
|
||||||
// wait up to a second for the connection to close
|
// wait up to a second for the connection to close
|
||||||
uint8_t s;
|
|
||||||
do {
|
do {
|
||||||
s = status();
|
uint8_t s = status();
|
||||||
if (s == ETHERNETCLIENT_W5100_CLOSED) {
|
if (s == ETHERNETCLIENT_W5100_CLOSED) {
|
||||||
break; // exit the loop
|
break; // exit the loop
|
||||||
}
|
}
|
||||||
@@ -231,10 +230,8 @@ void EthernetClient::stop()
|
|||||||
} while (((curTime.tv_sec - startTime.tv_sec) * 1000000) + (curTime.tv_usec - startTime.tv_usec) <
|
} while (((curTime.tv_sec - startTime.tv_sec) * 1000000) + (curTime.tv_usec - startTime.tv_usec) <
|
||||||
1000000);
|
1000000);
|
||||||
|
|
||||||
// if it hasn't closed, close it forcefully
|
// free up the socket descriptor
|
||||||
if (s != ETHERNETCLIENT_W5100_CLOSED) {
|
|
||||||
::close(_sock);
|
::close(_sock);
|
||||||
}
|
|
||||||
_sock = -1;
|
_sock = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -155,13 +155,11 @@ size_t EthernetServer::write(uint8_t b)
|
|||||||
size_t EthernetServer::write(const uint8_t *buffer, size_t size)
|
size_t EthernetServer::write(const uint8_t *buffer, size_t size)
|
||||||
{
|
{
|
||||||
size_t n = 0;
|
size_t n = 0;
|
||||||
size_t i = 0;
|
|
||||||
|
|
||||||
while (i < clients.size()) {
|
for (size_t i = 0; i < clients.size(); ++i) {
|
||||||
EthernetClient client(clients[i]);
|
EthernetClient client(clients[i]);
|
||||||
if (client.status() == ETHERNETCLIENT_W5100_ESTABLISHED) {
|
if (client.status() == ETHERNETCLIENT_W5100_ESTABLISHED) {
|
||||||
n += client.write(buffer, size);
|
n += client.write(buffer, size);
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user