Socket server test

main.cpp

Committer:
infinnovation
Date:
2016-08-23
Revision:
0:d2e0685698cc
Child:
4:19dd8a25cc8a

File content as of revision 0:d2e0685698cc:

#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);
    }
}