wifly/socket interface for wifly modules
Dependents: WiFi neurGAI_WIFI thingspeak thingspeak2
Diff: Socket/TCPSocketConnection.cpp
- Revision:
- 6:f281180726e8
- Parent:
- 1:8f04181f9ad8
- Child:
- 9:aeddb7353e6e
--- a/Socket/TCPSocketConnection.cpp Thu Aug 23 10:37:27 2012 +0000 +++ b/Socket/TCPSocketConnection.cpp Thu Aug 23 11:49:33 2012 +0000 @@ -113,22 +113,29 @@ int TCPSocketConnection::receive(char* data, int length) { Timer tmr; - + int time = -1; + + if (!_blocking) { tmr.start(); - while (tmr.read_ms() < _timeout) { - if (wifi->readable()) + while (time < _timeout + 20) { + if (wifi->readable()) { break; + } + time = tmr.read_ms(); } - if (tmr.read_ms() >= _timeout) + if (time >= _timeout + 20) { return -1; + } } + while(!wifi->readable()); int nb_available = wifi->readable(); for (int i = 0; i < min(nb_available, length); i++) { data[i] = wifi->getc(); } + return min(nb_available, length); } @@ -138,10 +145,11 @@ { Timer tmr; int idx = 0; + int time = -1; tmr.start(); - - while (tmr.read_ms() < _timeout || _blocking) { + + while (time < _timeout || _blocking) { int nb_available = wifi->readable(); for (int i = 0; i < min(nb_available, length); i++) { @@ -149,7 +157,9 @@ } if (idx == length) - return idx; + break; + + time = tmr.read_ms(); } return (idx == 0) ? -1 : idx;