diff options
| author | Sepalani <sepalani@hotmail.fr> | 2026-07-31 18:25:54 +0400 |
|---|---|---|
| committer | Sepalani <sepalani@hotmail.fr> | 2026-07-31 18:25:54 +0400 |
| commit | a3a43f9bd234006cb13759ba3b5d7597433821e2 (patch) | |
| tree | 32cb5ac3335e7b77ed8f21fffdab4d353332cef9 | |
| parent | d742aa8b4c4d052f7dceaa39022b1fe3996f1781 (diff) | |
IP/Top: Add getaddrinfo() error log message
| -rw-r--r-- | Source/Core/Core/IOS/Network/IP/Top.cpp | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/Source/Core/Core/IOS/Network/IP/Top.cpp b/Source/Core/Core/IOS/Network/IP/Top.cpp index 86d206d8e4..e38fd1df01 100644 --- a/Source/Core/Core/IOS/Network/IP/Top.cpp +++ b/Source/Core/Core/IOS/Network/IP/Top.cpp @@ -58,6 +58,12 @@ #include <linux/rtnetlink.h> #endif +auto format_as(addrinfo hints) +{ + return fmt::format("flags={}, family={}, socktype={}, protocol={}, addrlen={}", hints.ai_flags, + hints.ai_family, hints.ai_socktype, hints.ai_protocol, hints.ai_addrlen); +} + namespace IOS::HLE { enum SOResultCode : s32 @@ -66,6 +72,21 @@ enum SOResultCode : s32 SO_ERROR_HOST_NOT_FOUND = -305, }; +namespace +{ +const char* GaiStrError(s32 error) +{ +#ifdef _WIN32 + // gai_strerror isn't thread safe on Windows + return Common::DecodeNetworkError(error); +#else + // Unlike Windows it doesn't return regular error codes + // e.g. EAI_AGAIN vs errno's EAGAIN + return gai_strerror(error); +#endif +} +} // namespace + NetIPTopDevice::NetIPTopDevice(EmulationKernel& ios, const std::string& device_name) : EmulationDevice(ios, device_name) { @@ -1281,10 +1302,10 @@ IPCReply NetIPTopDevice::HandleGetAddressInfoRequest(const IOCtlVRequest& reques addrinfo* result = nullptr; int ret = getaddrinfo(pNodeName, pServiceName, hints_valid ? &hints : nullptr, &result); - u32 addr = request.io_vectors[0].address; - u32 sockoffset = addr + 0x460; if (ret == 0) { + u32 addr = request.io_vectors[0].address; + u32 sockoffset = addr + 0x460; constexpr size_t WII_ADDR_INFO_SIZE = 0x20; for (addrinfo* result_iter = result; result_iter != nullptr; result_iter = result_iter->ai_next) { @@ -1326,6 +1347,15 @@ IPCReply NetIPTopDevice::HandleGetAddressInfoRequest(const IOCtlVRequest& reques } else { + const char* const hostname = pNodeName ? pNodeName : "(null)"; + const char* const service = pServiceName ? pServiceName : "(null)"; + const std::string hints_description{hints_valid ? fmt::format("{}", hints) : "(null)"}; + ERROR_LOG_FMT(IOS_NET, + "getaddrinfo failed with error {}: {}\n" + " - hostname: {}\n" + " - service: {}\n" + " - hints: {}", + ret, GaiStrError(ret), hostname, service, hints_description); ret = SO_ERROR_HOST_NOT_FOUND; } |
