socket_utils.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (C) 2022 Amazon.com Inc. or its affiliates. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #ifndef TCP_UTILS_H
  6. #define TCP_UTILS_H
  7. #include <sys/socket.h>
  8. #include <arpa/inet.h>
  9. #include <stdio.h>
  10. int
  11. sockaddr_to_string(struct sockaddr *addr, char *str, size_t len)
  12. {
  13. uint16_t port;
  14. char ip_string[64];
  15. void *addr_buf;
  16. int ret;
  17. switch (addr->sa_family) {
  18. case AF_INET:
  19. {
  20. struct sockaddr_in *addr_in = (struct sockaddr_in *)addr;
  21. port = addr_in->sin_port;
  22. addr_buf = &addr_in->sin_addr;
  23. break;
  24. }
  25. case AF_INET6:
  26. {
  27. struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr;
  28. port = addr_in6->sin6_port;
  29. addr_buf = &addr_in6->sin6_addr;
  30. break;
  31. }
  32. default:
  33. return -1;
  34. }
  35. inet_ntop(addr->sa_family, addr_buf, ip_string,
  36. sizeof(ip_string) / sizeof(ip_string[0]));
  37. ret = snprintf(str, len, "%s:%d", ip_string, ntohs(port));
  38. return ret > 0 && (size_t)ret < len ? 0 : -1;
  39. }
  40. #endif /* TCP_UTILS_H */