@@ -131,6 +131,7 @@ struct esp8266_socket {
131131 int id;
132132 nsapi_protocol_t proto;
133133 bool connected;
134+ SocketAddress addr;
134135};
135136
136137int ESP8266Interface::socket_open (void **handle, nsapi_protocol_t proto)
@@ -234,20 +235,35 @@ int ESP8266Interface::socket_recv(void *handle, void *data, unsigned size)
234235int ESP8266Interface::socket_sendto (void *handle, const SocketAddress &addr, const void *data, unsigned size)
235236{
236237 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+
237247 if (!socket->connected ) {
238248 int err = socket_connect (socket, addr);
239249 if (err < 0 ) {
240250 return err;
241251 }
252+ socket->addr = addr;
242253 }
243254
244255 return socket_send (socket, data, size);
245256}
246257
247258int ESP8266Interface::socket_recvfrom (void *handle, SocketAddress *addr, void *data, unsigned size)
248259{
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;
251267}
252268
253269void ESP8266Interface::socket_attach (void *handle, void (*callback)(void *), void *data)
0 commit comments