Test to demonstrate that TCP sockets lock up
Dependencies: EthernetInterface mbed-rtos mbed
Fork of TCPSocket_HelloWorld by
EthernetInterface to revision 32 (mbed-rtos to revision 12, mbed to revision 63)
main.cpp
- Committer:
- mbed714
- Date:
- 2013-07-16
- Revision:
- 16:9a1409b1a7fc
- Parent:
- 14:c3694118dd57
File content as of revision 16:9a1409b1a7fc:
#include "mbed.h"
#include "EthernetInterface.h"
#define RETRIES_ALLOWED 5
Serial pc2(USBTX, USBRX);
EthernetInterface eth;
DigitalOut led1(LED1);
int main()
{
pc2.baud(115200);
printf("Initialising...\n");
set_time(0);
// use DHCP
eth.init();
// attempt DHCP and if timing out then try again
while (eth.connect()) {
printf("DHCP timeout\n");
};
// successful DHCP
printf("IP Address is %s\n", eth.getIPAddress());
// loop forever
while (true) {
// new non blocking socket
TCPSocketConnection sock;
sock.set_blocking(false);
// toggle led to indicate activity
led1 = !led1;
// attempt socket connection and if failure then loop again
if (sock.connect("mbed.org", 80)) {
printf("Socket connect timeout\n");
continue;
}
// send command
printf("Sending at %d seconds\n", time(NULL));
char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
sock.send_all(http_cmd, sizeof(http_cmd) - 1);
// receive response
int received = 0;
int retries = 0;
while (true) {
int result;
char buffer[256];
result = sock.receive(buffer, sizeof(buffer) - 1);
printf("Received: %d %d %d\n", result, received, retries);
// if timeout or no data
if (result <= 0) {
// if data previously received then stop receiving
if (received > 0)
break;
// if incremented retries exceeded then no response and stop receiving
if (++retries > RETRIES_ALLOWED) {
break;
}
} else {
// zero terminate the buffer
buffer[result] = '\0';
// total size of data received
received += result;
}
}
// close socket at end of send and receive
sock.close();
// wait before repeating
Thread::wait(1000);
}
}
