1
0

udp.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "hloop.h"
  2. #include "hsocket.h"
  3. #define RECV_BUFSIZE 8192
  4. static char recvbuf[RECV_BUFSIZE];
  5. void on_close(hio_t* io) {
  6. printf("on_close fd=%d error=%d\n", hio_fd(io), hio_error(io));
  7. }
  8. void on_recvfrom(hio_t* io, void* buf, int readbytes) {
  9. printf("on_recvfrom fd=%d readbytes=%d\n", hio_fd(io), readbytes);
  10. char localaddrstr[SOCKADDR_STRLEN] = {0};
  11. char peeraddrstr[SOCKADDR_STRLEN] = {0};
  12. printf("[%s] <=> [%s]\n",
  13. SOCKADDR_STR(hio_localaddr(io), localaddrstr),
  14. SOCKADDR_STR(hio_peeraddr(io), peeraddrstr));
  15. printf("< %s\n", buf);
  16. // echo
  17. printf("> %s\n", buf);
  18. hio_write(io, buf, readbytes);
  19. }
  20. int main(int argc, char** argv) {
  21. if (argc < 2) {
  22. printf("Usage: cmd port\n");
  23. return -10;
  24. }
  25. int port = atoi(argv[1]);
  26. hloop_t* loop = hloop_new(0);
  27. hio_t* io = create_udp_server(loop, "0.0.0.0", port);
  28. if (io == NULL) {
  29. return -20;
  30. }
  31. hio_setcb_close(io, on_close);
  32. hio_setcb_read(io, on_recvfrom);
  33. hio_set_readbuf(io, recvbuf, RECV_BUFSIZE);
  34. hio_read(io);
  35. hloop_run(loop);
  36. hloop_free(&loop);
  37. return 0;
  38. }