Test to demonstrate that TCP sockets lock up

Dependencies:   EthernetInterface mbed-rtos mbed

Fork of TCPSocket_HelloWorld by mbed official

EthernetInterface to revision 32 (mbed-rtos to revision 12, mbed to revision 63)

Committer:
mbed714
Date:
Tue Jul 16 13:06:47 2013 +0000
Revision:
16:9a1409b1a7fc
Parent:
14:c3694118dd57
Update of libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
donatien 0:bb128f0e952f 2 #include "EthernetInterface.h"
donatien 0:bb128f0e952f 3
mbed714 12:9bef73198a53 4 #define RETRIES_ALLOWED 5
mbed714 12:9bef73198a53 5
mbed714 14:c3694118dd57 6 Serial pc2(USBTX, USBRX);
mbed714 12:9bef73198a53 7 EthernetInterface eth;
mbed714 12:9bef73198a53 8 DigitalOut led1(LED1);
mbed714 12:9bef73198a53 9
mbed714 12:9bef73198a53 10 int main()
mbed714 12:9bef73198a53 11 {
mbed714 12:9bef73198a53 12
mbed714 14:c3694118dd57 13 pc2.baud(115200);
mbed714 12:9bef73198a53 14 printf("Initialising...\n");
mbed714 12:9bef73198a53 15 set_time(0);
mbed714 12:9bef73198a53 16
mbed714 12:9bef73198a53 17 // use DHCP
mbed714 12:9bef73198a53 18 eth.init();
mbed714 12:9bef73198a53 19
mbed714 12:9bef73198a53 20 // attempt DHCP and if timing out then try again
mbed714 12:9bef73198a53 21 while (eth.connect()) {
mbed714 12:9bef73198a53 22 printf("DHCP timeout\n");
mbed714 12:9bef73198a53 23 };
mbed714 12:9bef73198a53 24
mbed714 12:9bef73198a53 25 // successful DHCP
emilmont 2:e087e9b789e9 26 printf("IP Address is %s\n", eth.getIPAddress());
mbed714 12:9bef73198a53 27
mbed714 12:9bef73198a53 28 // loop forever
emilmont 7:65188f4a8c25 29 while (true) {
mbed714 12:9bef73198a53 30
mbed714 12:9bef73198a53 31 // new non blocking socket
mbed714 12:9bef73198a53 32 TCPSocketConnection sock;
mbed714 12:9bef73198a53 33 sock.set_blocking(false);
mbed714 12:9bef73198a53 34
mbed714 12:9bef73198a53 35 // toggle led to indicate activity
mbed714 12:9bef73198a53 36 led1 = !led1;
mbed714 12:9bef73198a53 37
mbed714 12:9bef73198a53 38 // attempt socket connection and if failure then loop again
mbed714 12:9bef73198a53 39 if (sock.connect("mbed.org", 80)) {
mbed714 12:9bef73198a53 40 printf("Socket connect timeout\n");
mbed714 12:9bef73198a53 41 continue;
mbed714 12:9bef73198a53 42 }
mbed714 12:9bef73198a53 43
mbed714 12:9bef73198a53 44 // send command
mbed714 12:9bef73198a53 45 printf("Sending at %d seconds\n", time(NULL));
mbed714 12:9bef73198a53 46 char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
mbed714 12:9bef73198a53 47 sock.send_all(http_cmd, sizeof(http_cmd) - 1);
mbed714 12:9bef73198a53 48
mbed714 12:9bef73198a53 49 // receive response
mbed714 12:9bef73198a53 50 int received = 0;
mbed714 12:9bef73198a53 51 int retries = 0;
mbed714 12:9bef73198a53 52 while (true) {
mbed714 12:9bef73198a53 53
mbed714 12:9bef73198a53 54 int result;
mbed714 12:9bef73198a53 55 char buffer[256];
mbed714 12:9bef73198a53 56
mbed714 12:9bef73198a53 57 result = sock.receive(buffer, sizeof(buffer) - 1);
mbed714 12:9bef73198a53 58 printf("Received: %d %d %d\n", result, received, retries);
mbed714 12:9bef73198a53 59
mbed714 12:9bef73198a53 60 // if timeout or no data
mbed714 12:9bef73198a53 61 if (result <= 0) {
mbed714 12:9bef73198a53 62
mbed714 12:9bef73198a53 63 // if data previously received then stop receiving
mbed714 12:9bef73198a53 64 if (received > 0)
mbed714 12:9bef73198a53 65 break;
mbed714 12:9bef73198a53 66
mbed714 12:9bef73198a53 67 // if incremented retries exceeded then no response and stop receiving
mbed714 12:9bef73198a53 68 if (++retries > RETRIES_ALLOWED) {
mbed714 12:9bef73198a53 69 break;
mbed714 12:9bef73198a53 70 }
mbed714 12:9bef73198a53 71
mbed714 12:9bef73198a53 72 } else {
mbed714 12:9bef73198a53 73
mbed714 12:9bef73198a53 74 // zero terminate the buffer
mbed714 12:9bef73198a53 75 buffer[result] = '\0';
mbed714 12:9bef73198a53 76
mbed714 12:9bef73198a53 77 // total size of data received
mbed714 12:9bef73198a53 78 received += result;
mbed714 12:9bef73198a53 79 }
mbed714 12:9bef73198a53 80
mbed714 12:9bef73198a53 81 }
mbed714 12:9bef73198a53 82
mbed714 12:9bef73198a53 83 // close socket at end of send and receive
mbed714 12:9bef73198a53 84 sock.close();
mbed714 12:9bef73198a53 85
mbed714 12:9bef73198a53 86 // wait before repeating
mbed714 12:9bef73198a53 87 Thread::wait(1000);
mbed714 12:9bef73198a53 88
emilmont 7:65188f4a8c25 89 }
mbed714 12:9bef73198a53 90 }