@@ -131,6 +131,7 @@ struct esp8266_socket {
131
131
int id;
132
132
nsapi_protocol_t proto;
133
133
bool connected;
134
+ SocketAddress addr;
134
135
};
135
136
136
137
int ESP8266Interface::socket_open (void **handle, nsapi_protocol_t proto)
@@ -234,20 +235,35 @@ int ESP8266Interface::socket_recv(void *handle, void *data, unsigned size)
234
235
int ESP8266Interface::socket_sendto (void *handle, const SocketAddress &addr, const void *data, unsigned size)
235
236
{
236
237
struct esp8266_socket *socket = (struct esp8266_socket *)handle;
238
+
239
+ if (socket->connected && socket->addr != addr) {
240
+ _esp.setTimeout (ESP8266_MISC_TIMEOUT);
241
+ if (!_esp.close (socket->id )) {
242
+ return NSAPI_ERROR_DEVICE_ERROR;
243
+ }
244
+ socket->connected = false ;
245
+ }
246
+
237
247
if (!socket->connected ) {
238
248
int err = socket_connect (socket, addr);
239
249
if (err < 0 ) {
240
250
return err;
241
251
}
252
+ socket->addr = addr;
242
253
}
243
254
244
255
return socket_send (socket, data, size);
245
256
}
246
257
247
258
int ESP8266Interface::socket_recvfrom (void *handle, SocketAddress *addr, void *data, unsigned size)
248
259
{
249
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
250
- return socket_recv (socket, data, size);
260
+ struct esp8266_socket *socket = (struct esp8266_socket *)handle;
261
+ int ret = socket_recv (socket, data, size);
262
+ if (ret >= 0 && addr) {
263
+ *addr = socket->addr ;
264
+ }
265
+
266
+ return ret;
251
267
}
252
268
253
269
void ESP8266Interface::socket_attach (void *handle, void (*callback)(void *), void *data)
0 commit comments