Colin Hogben
/
sendrecv
Demonstrate unexpected interaction between send() and recv()
main.cpp@0:b380efeccf3a, 2016-08-18 (annotated)
- Committer:
- infinnovation
- Date:
- Thu Aug 18 16:17:35 2016 +0000
- Revision:
- 0:b380efeccf3a
Initial commit
Who changed what in which revision?
User | Revision | Line number | New 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(ð); |
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 | } |