![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
OneNet_IoT_demo for ASC platform
Dependencies: Common_lib ESP8266 EdpKit_lib cJSON_lib driver_mbed_HP20x driver_mbed_TH02 wifi_example
Fork of mbed-os-example-esp8266 by
Diff: esp8266-driver/ESP8266Interface.cpp
- Revision:
- 1:b4a718e62e0b
- Parent:
- 0:b887535f68bf
--- a/esp8266-driver/ESP8266Interface.cpp Thu Jan 12 20:21:45 2017 +0000 +++ b/esp8266-driver/ESP8266Interface.cpp Thu Jan 12 22:05:15 2017 +0000 @@ -131,6 +131,7 @@ int id; nsapi_protocol_t proto; bool connected; + SocketAddress addr; }; int ESP8266Interface::socket_open(void **handle, nsapi_protocol_t proto) @@ -234,11 +235,21 @@ int ESP8266Interface::socket_sendto(void *handle, const SocketAddress &addr, const void *data, unsigned size) { struct esp8266_socket *socket = (struct esp8266_socket *)handle; + + if (socket->connected && socket->addr != addr) { + _esp.setTimeout(ESP8266_MISC_TIMEOUT); + if (!_esp.close(socket->id)) { + return NSAPI_ERROR_DEVICE_ERROR; + } + socket->connected = false; + } + if (!socket->connected) { int err = socket_connect(socket, addr); if (err < 0) { return err; } + socket->addr = addr; } return socket_send(socket, data, size); @@ -246,8 +257,13 @@ int ESP8266Interface::socket_recvfrom(void *handle, SocketAddress *addr, void *data, unsigned size) { - struct esp8266_socket *socket = (struct esp8266_socket *)handle; - return socket_recv(socket, data, size); + struct esp8266_socket *socket = (struct esp8266_socket *)handle; + int ret = socket_recv(socket, data, size); + if (ret >= 0 && addr) { + *addr = socket->addr; + } + + return ret; } void ESP8266Interface::socket_attach(void *handle, void (*callback)(void *), void *data)