Socket server test

Revision:
0:d2e0685698cc
Child:
4:19dd8a25cc8a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Aug 23 19:22:03 2016 +0000
@@ -0,0 +1,64 @@
+#include "mbed.h"
+#include "EthernetInterface.h"
+
+#ifndef SRV_PORT
+#define SRV_PORT 8084
+#endif
+
+EthernetInterface eth;
+
+void tcp_echo_conn(TCPSocket *sock)
+{
+    char buf[200];
+    int ret;
+    while (true) {
+        ret = sock->recv(buf, sizeof(buf));
+        if (ret < 0) {
+            error("recv: %d", ret);
+        } else if (ret == 0) {
+            printf("recv: EOF\r\n");
+            delete sock;
+            break;
+        } else {
+            ret = sock->send(buf, ret);
+            if (ret < 0) {
+                error("send: %d", ret);
+            }
+        }
+    }
+}
+
+void tcp_echo(TCPServer *srv)
+{
+    int err;
+    while (true) {
+        TCPSocket *sock = new TCPSocket;
+        err = srv->accept(sock);
+        if (err) error("accept: %d\r\n", err);
+        printf("accepted connection\r\n");
+        Thread *conn_thread = new Thread;
+        conn_thread->start(Callback<void()>(sock, tcp_echo_conn));
+    }
+}
+
+int main(void)
+{
+    int err;
+    printf("\r\n== socket-test %s ==\r\n", __DATE__);
+    err = eth.connect();
+    if (err) error("connect: %d\n", err);
+    printf("ip %s\r\n", eth.get_ip_address());
+    TCPServer srv;
+    err = srv.open(&eth);
+    if (err) error("open: %d\r\n", err);
+    err = srv.bind(SRV_PORT);
+    if (err) error("bind: %d\r\n", err);
+    err = srv.listen(1);
+    if (err) error("listen: %d\r\n", err);
+    Thread srv_thread;
+    srv_thread.start(Callback<void()>(&srv, tcp_echo));
+
+    while (true) {
+        wait(1.0);
+    }
+}
\ No newline at end of file