Demonstrate unexpected interaction between send() and recv()

Committer:
infinnovation
Date:
Thu Aug 18 16:17:35 2016 +0000
Revision:
0:b380efeccf3a
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
infinnovation 0:b380efeccf3a 1 #include "mbed.h"
infinnovation 0:b380efeccf3a 2 #include "EthernetInterface.h"
infinnovation 0:b380efeccf3a 3
infinnovation 0:b380efeccf3a 4 Serial pc(USBTX, USBRX);
infinnovation 0:b380efeccf3a 5 EthernetInterface eth;
infinnovation 0:b380efeccf3a 6
infinnovation 0:b380efeccf3a 7 void
infinnovation 0:b380efeccf3a 8 s2c_run(TCPSocket *sock)
infinnovation 0:b380efeccf3a 9 {
infinnovation 0:b380efeccf3a 10 int ret;
infinnovation 0:b380efeccf3a 11 char c;
infinnovation 0:b380efeccf3a 12 while (true) {
infinnovation 0:b380efeccf3a 13 ret = sock->recv(&c, 1);
infinnovation 0:b380efeccf3a 14 if (ret == 1) {
infinnovation 0:b380efeccf3a 15 printf("recv %02x=%c\r\n", c, (0x20 <= c && c < 0x7f) ? c : '?');
infinnovation 0:b380efeccf3a 16 } else if (ret == 0) {
infinnovation 0:b380efeccf3a 17 printf("EOS\r\n");
infinnovation 0:b380efeccf3a 18 } else {
infinnovation 0:b380efeccf3a 19 error("recv: %d\r\n", ret);
infinnovation 0:b380efeccf3a 20 }
infinnovation 0:b380efeccf3a 21 }
infinnovation 0:b380efeccf3a 22 }
infinnovation 0:b380efeccf3a 23
infinnovation 0:b380efeccf3a 24 int main(void)
infinnovation 0:b380efeccf3a 25 {
infinnovation 0:b380efeccf3a 26 Thread s2c;
infinnovation 0:b380efeccf3a 27 int err;
infinnovation 0:b380efeccf3a 28
infinnovation 0:b380efeccf3a 29 printf("\r\n== sendrecv ==\r\n");
infinnovation 0:b380efeccf3a 30 err = eth.connect();
infinnovation 0:b380efeccf3a 31 if (err) error("connect: %d\n", err);
infinnovation 0:b380efeccf3a 32 printf("ip %s\r\n", eth.get_ip_address());
infinnovation 0:b380efeccf3a 33 TCPServer srv;
infinnovation 0:b380efeccf3a 34 err = srv.open(&eth);
infinnovation 0:b380efeccf3a 35 if (err) error("open: %d\r\n", err);
infinnovation 0:b380efeccf3a 36 err = srv.bind(8084);
infinnovation 0:b380efeccf3a 37 if (err) error("bind: %d\r\n", err);
infinnovation 0:b380efeccf3a 38 err = srv.listen(1);
infinnovation 0:b380efeccf3a 39 if (err) error("listen: %d\r\n", err);
infinnovation 0:b380efeccf3a 40 TCPSocket sock;
infinnovation 0:b380efeccf3a 41 err = srv.accept(&sock);
infinnovation 0:b380efeccf3a 42 if (err) error("accept: %d\r\n", err);
infinnovation 0:b380efeccf3a 43 printf("accepted connection\r\n");
infinnovation 0:b380efeccf3a 44 s2c.start(Callback<void()>(&sock, s2c_run));
infinnovation 0:b380efeccf3a 45 while (true) {
infinnovation 0:b380efeccf3a 46 printf("tick...\r\n");
infinnovation 0:b380efeccf3a 47 err = sock.send("tick\n", 5);
infinnovation 0:b380efeccf3a 48 if (err <= 0) error("send: %d\r\n", err);
infinnovation 0:b380efeccf3a 49 printf("...sent\r\n");
infinnovation 0:b380efeccf3a 50 wait(1.0);
infinnovation 0:b380efeccf3a 51 }
infinnovation 0:b380efeccf3a 52 }