Daniele Lacamera / PicoTCP-Experimental_CDC_ECM_Branch

Fork of PicoTCP by Daniele Lacamera

Revision:
24:8bff2b51ea3b
Parent:
19:c7debad9a20a
diff -r 884f327c3647 -r 8bff2b51ea3b Socket/TCPSocketConnection.cpp
--- a/Socket/TCPSocketConnection.cpp	Mon Jun 10 08:01:01 2013 +0000
+++ b/Socket/TCPSocketConnection.cpp	Tue Jun 11 21:10:23 2013 +0000
@@ -64,6 +64,7 @@
 }
 
 int TCPSocketConnection::send(char* data, int length) {
+    int ret;
     if ((_ep < 0) || !_is_connected)
         return -1;
     
@@ -75,11 +76,17 @@
             return -1;
         }
     }
-    return picotcp_write(_ep, data, length);
+    ret = picotcp_write(_ep, data, length);
+    if (ret < length) {
+        _ep->revents &= (~PICO_SOCK_EV_WR);
+        printf("Short write\n");
+    }
+    return ret;
 }
 
 // -1 if unsuccessful, else number of bytes written
 int TCPSocketConnection::send_all(char* data, int length) {
+    int ret;
     if ((_ep < 0) || !_is_connected)
         return -1;
         
@@ -90,10 +97,16 @@
            return 0;
         }
     }
-    return picotcp_write(_ep, data, length);
+    ret = picotcp_write(_ep, data, length);
+    if (ret < length) {
+        _ep->revents &= (~PICO_SOCK_EV_WR);
+        //printf("Short write\n");
+    }
+    return ret;
 }
 
 int TCPSocketConnection::receive(char* data, int length) {
+    int ret;
     if ((_ep < 0) || !_is_connected)
         return -1;
     
@@ -105,7 +118,12 @@
             return -1;
         }
     }
-    return picotcp_read(_ep, data, length);
+    ret = picotcp_read(_ep, data, length);
+    if (ret < length) {
+        _ep->revents &= (~PICO_SOCK_EV_RD);
+        //printf("Short read\n");
+    }
+    return ret;
 }
 
 // -1 if unsuccessful, else number of bytes received