![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Socket server test
Diff: main.cpp
- 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(ð); + 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