ap
Dependencies: DnsQuery
Dependents: WizFi310_TCP_Echo_Server_Example
Fork of NetworkSocketAPI by
Diff: Socket.cpp
- Branch:
- api-changes
- Revision:
- 27:d7ed39727306
- Parent:
- 25:ed7b2a52e8ac
- Child:
- 28:163fbe3263f4
--- a/Socket.cpp Thu Feb 18 06:16:11 2016 -0600 +++ b/Socket.cpp Thu Feb 18 09:20:39 2016 -0600 @@ -15,6 +15,8 @@ */ #include "Socket.h" +#include <cstdlib> +#include <cstring> Socket::Socket( NetworkInterface *iface, @@ -23,36 +25,74 @@ uint16_t port) : _iface(iface) , _proto(proto) - , _socket(0) { - if (url) setURL(url); - if (port) setPort(port); + , _socket(0) + , _pending_url(0) + , _pending_ip(0) + , _pending_port(0) { + + if (url) { + _pending_url = (char*)malloc(strlen(url)+1); + strcpy(_pending_url, url); + } + + if (port) { + _pending_port = port; + } } Socket::~Socket() { if (_socket) _iface->destroySocket(_socket); + free(_pending_url); + free(_pending_ip); } SocketInterface *Socket::_get_socket() { - if (!_socket) _socket = _iface->createSocket(_proto); + if (!_socket) { + _socket = _iface->createSocket(_proto); + + if (_pending_url) { + _socket->setURL(_pending_url); + free(_pending_url); + _pending_url = 0; + } + + if (_pending_ip) { + _socket->setIPAddress(_pending_ip); + free(_pending_ip); + _pending_ip = 0; + } + + if (_pending_port) { + _socket->setPort(_pending_port); + _pending_port = 0; + } + } + return _socket; } -void Socket::setURL(const char *url) { +int32_t Socket::setURL(const char *url) { SocketInterface *s = _get_socket(); - if (!s) return; - s->setURL(url); + if (!s) return -2; + return s->setURL(url); } void Socket::setIPAddress(const char *ip) { - SocketInterface *s = _get_socket(); - if (!s) return; - s->setIPAddress(ip); + if (!_socket) { + free(_pending_ip); + _pending_ip = (char*)malloc(strlen(ip)+1); + strcpy(_pending_ip, ip); + } else { + _socket->setIPAddress(ip); + } } void Socket::setPort(uint16_t port) { - SocketInterface *s = _get_socket(); - if (!s) return; - s->setPort(port); + if (!_socket) { + _pending_port = port; + } else { + _socket->setPort(port); + } } const char *Socket::getIPAddress() {