udp.c 1.1 KB

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