wifly/socket interface for wifly modules

Dependents:   WiFi neurGAI_WIFI thingspeak thingspeak2

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;