@@ -96,19 +96,15 @@ struct c027_socket {
96
96
};
97
97
98
98
static void socket_poll (struct c027_socket *socket) {
99
- bool was_readable = false ;
100
-
101
99
while (socket->running ) {
102
100
socket->mutex .lock ();
103
- bool is_readable = !!socket->mdm ->socketReadable (socket->socket );
104
-
105
- if (is_readable != was_readable) {
101
+ if (socket->mdm ->socketReadable (socket->socket )) {
106
102
if (socket->callback ) {
107
103
socket->callback (socket->data );
108
104
}
109
- was_readable = is_readable;
110
105
}
111
106
socket->mutex .unlock ();
107
+ Thread::yield ();
112
108
}
113
109
}
114
110
@@ -166,6 +162,9 @@ int C027Interface::socket_connect(void *handle, const SocketAddress &addr)
166
162
167
163
socket->mutex .lock ();
168
164
bool success = _mdm->socketConnect (socket->socket , addr.get_ip_address (), addr.get_port ());
165
+ if (socket->callback ) {
166
+ socket->callback (socket->data );
167
+ }
169
168
socket->mutex .unlock ();
170
169
171
170
if (!success) {
@@ -186,6 +185,10 @@ int C027Interface::socket_send(void *handle, const void *data, unsigned size)
186
185
187
186
socket->mutex .lock ();
188
187
int sent = _mdm->socketSend (socket->socket , (const char *)data, size);
188
+
189
+ if (socket->callback ) {
190
+ socket->callback (socket->data );
191
+ }
189
192
socket->mutex .unlock ();
190
193
191
194
if (sent == SOCKET_ERROR) {
@@ -212,6 +215,10 @@ int C027Interface::socket_recv(void *handle, void *data, unsigned size)
212
215
return NSAPI_ERROR_DEVICE_ERROR;
213
216
}
214
217
218
+ if (recv == 0 ) {
219
+ return NSAPI_ERROR_WOULD_BLOCK;
220
+ }
221
+
215
222
return recv;
216
223
}
217
224
@@ -223,6 +230,10 @@ int C027Interface::socket_sendto(void *handle, const SocketAddress &addr, const
223
230
int sent = _mdm->socketSendTo (socket->socket ,
224
231
*(MDMParser::IP *)addr.get_ip_bytes (), addr.get_port (),
225
232
(const char *)data, size);
233
+
234
+ if (socket->callback ) {
235
+ socket->callback (socket->data );
236
+ }
226
237
socket->mutex .unlock ();
227
238
228
239
if (sent == SOCKET_ERROR) {
@@ -252,6 +263,10 @@ int C027Interface::socket_recvfrom(void *handle, SocketAddress *addr, void *data
252
263
return NSAPI_ERROR_DEVICE_ERROR;
253
264
}
254
265
266
+ if (recv == 0 ) {
267
+ return NSAPI_ERROR_WOULD_BLOCK;
268
+ }
269
+
255
270
if (addr) {
256
271
addr->set_ip_bytes (&ip, NSAPI_IPv4);
257
272
addr->set_port (port);
0 commit comments