now this shit works
Fork of ESP8266NodeMCUInterface by
Revision 21:690526f05fe6, committed 2014-12-02
- Comitter:
- michaeljkoster
- Date:
- Tue Dec 02 04:16:26 2014 +0000
- Parent:
- 20:d764237405c2
- Child:
- 22:c4360e61486a
- Commit message:
- Fix recieveFrom loop to have 2 stage timeout in non-blocking case, return 0 bytes
Changed in this revision
| Socket/Socket.cpp | Show annotated file Show diff for this revision Revisions of this file |
| Socket/UDPSocket.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Socket/Socket.cpp Mon Dec 01 09:28:02 2014 +0000
+++ b/Socket/Socket.cpp Tue Dec 02 04:16:26 2014 +0000
@@ -19,6 +19,8 @@
#include "Socket.h"
#include <cstring>
+extern Serial pc;
+
Socket::Socket() : _blocking(true), _timeout(1500) {
wifi = ESP8266::getInstance();
if (wifi == NULL)
@@ -26,6 +28,7 @@
}
void Socket::set_blocking(bool blocking, unsigned int timeout) {
+ pc.printf("set blocking: %d %d\r\n", blocking, timeout);
_blocking = blocking;
_timeout = timeout;
}
--- a/Socket/UDPSocket.cpp Mon Dec 01 09:28:02 2014 +0000
+++ b/Socket/UDPSocket.cpp Tue Dec 02 04:16:26 2014 +0000
@@ -76,9 +76,20 @@
break;
}
}
- pc.printf("UDPsocket::receiveFrom: %d bytes\r\n", nb_available);
- }
-
+ }
+ else {
+ tmr.start();
+
+ while (time < _timeout){
+ nb_available = wifi->readable();
+ if (nb_available < 0) return nb_available;
+ if (nb_available > 0) break ;
+ time = tmr.read_ms();
+ }
+
+ if (nb_available == 0) return nb_available;
+ }
+
tmr.start();
while (time < _timeout) {
