From 7d82078c22cbef09feefe8509f77bd5b646261cd Mon Sep 17 00:00:00 2001 From: Volodymyr Yavdoshenko Date: Thu, 8 May 2025 14:40:11 +0300 Subject: [PATCH] fix: review comments --- src/facade/socket_utils.cc | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/facade/socket_utils.cc b/src/facade/socket_utils.cc index e842cf59f..2baaa80f5 100644 --- a/src/facade/socket_utils.cc +++ b/src/facade/socket_utils.cc @@ -15,6 +15,21 @@ #endif +namespace { + +int get_socket_family(int fd) { + struct sockaddr_storage ss; + socklen_t len = sizeof(ss); + + if (getsockname(fd, (struct sockaddr*)&ss, &len) == -1) { + return -1; // Indicate an error + } + + return ss.ss_family; +} + +} // namespace + namespace dfly { // Returns information about the TCP socket state by its descriptor @@ -28,13 +43,18 @@ std::string GetSocketInfo(int socket_fd) { return "could not stat socket"; } - auto tcp_info = io::ReadTcpInfo(sock_stat.st_ino); + io::Result tcp_info; + int family = get_socket_family(socket_fd); + if (family == AF_INET) { + tcp_info = io::ReadTcpInfo(sock_stat.st_ino); + } else if (family == AF_INET6) { + tcp_info = io::ReadTcp6Info(sock_stat.st_ino); + } else { + return "unsupported socket family"; + } + if (!tcp_info) { - auto tcp6_info = io::ReadTcp6Info(sock_stat.st_ino); - if (!tcp6_info) { - return "socket not found in /proc/net/tcp or /proc/net/tcp6"; - } - tcp_info = std::move(tcp6_info); + return "socket not found in /proc/net/tcp or /proc/net/tcp6"; } std::string state_str = io::TcpStateToString(tcp_info->state);