util.h 997 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include "workflow/WFTaskFactory.h"
  7. template <class TASK>
  8. void print_peer_address(TASK *server_task)
  9. {
  10. char addrstr[128];
  11. struct sockaddr_storage addr;
  12. socklen_t l = sizeof addr;
  13. unsigned short port = 0;
  14. long long seq = server_task->get_task_seq();
  15. server_task->get_peer_addr((struct sockaddr *)&addr, &l);
  16. if (addr.ss_family == AF_INET)
  17. {
  18. struct sockaddr_in *sin = (struct sockaddr_in *)&addr;
  19. inet_ntop(AF_INET, &sin->sin_addr, addrstr, 128);
  20. port = ntohs(sin->sin_port);
  21. }
  22. else if (addr.ss_family == AF_INET6)
  23. {
  24. struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&addr;
  25. inet_ntop(AF_INET6, &sin6->sin6_addr, addrstr, 128);
  26. port = ntohs(sin6->sin6_port);
  27. }
  28. else
  29. strcpy(addrstr, "Unknown");
  30. fprintf(stderr, "peer address: %s:%d, seq: %lld.\n", addrstr, port, seq);
  31. }