Socket library for MTS Socket Modem Arduino Shield devices from Multi-Tech Systems
Dependencies: HTTPClient-SSL
Dependents: mtsas mtsas mtsas mtsas_lat3
Diff: TCPSocketConnection.cpp
- Revision:
- 1:096f484f3ae6
- Child:
- 2:ebc6129de4e8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TCPSocketConnection.cpp Mon May 19 12:36:11 2014 -0500 @@ -0,0 +1,81 @@ +#include "TCPSocketConnection.h" +#include <algorithm> + +TCPSocketConnection::TCPSocketConnection() +{ +} + +int TCPSocketConnection::connect(const char* host, const int port) +{ + if (!ip->open(host, port, IPStack::TCP)) { + return -1; + } + return 0; +} + +bool TCPSocketConnection::is_connected(void) +{ + return ip->isOpen(); +} + +int TCPSocketConnection::send(char* data, int length) +{ + Timer tmr; + + if (!_blocking) { + tmr.start(); + while (tmr.read_ms() < _timeout) { + if (ip->writeable()) + break; + } + if (tmr.read_ms() >= _timeout) { + return -1; + } + } + return ip->write(data, length, 0); +} + +// -1 if unsuccessful, else number of bytes written +int TCPSocketConnection::send_all(char* data, int length) +{ + if (_blocking) { + return ip->write(data, length, -1); + } else { + return ip->write(data, length, _timeout); + } +} + +// -1 if unsuccessful, else number of bytes received +int TCPSocketConnection::receive(char* data, int length) +{ + Timer tmr; + int time = -1; + + if (!_blocking) { + tmr.start(); + while (time < _timeout + 20) { + if (ip->readable()) { + break; + } + time = tmr.read_ms(); + } + if (time >= _timeout + 20) { + return -1; + } + } else { + while(!ip->readable()); + } + + return ip->read(data, length, 0); +} + + +// -1 if unsuccessful, else number of bytes received +int TCPSocketConnection::receive_all(char* data, int length) +{ + if (_blocking) { + return ip->read(data, length, -1); + } else { + return ip->read(data, length, _timeout); + } +}