Networking (Windows): print readable error message

This commit is contained in:
李通洲
2025-03-16 10:38:04 +08:00
parent dbc6f70f19
commit 96e9e61437
4 changed files with 37 additions and 6 deletions
+1
View File
@@ -1034,6 +1034,7 @@ elseif(WIN32)
src/util/windows/version.c
src/util/platform/FFPlatform_windows.c
src/util/binary_windows.c
src/util/debug_windows.c
)
elseif(SunOS)
list(APPEND LIBFASTFETCH_SRC
+6 -6
View File
@@ -109,7 +109,7 @@ const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* ho
#ifdef TCP_NODELAY
// Enable TCP_NODELAY to disable Nagle's algorithm
if (setsockopt(state->sockfd, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(flag)) != 0) {
FF_DEBUG("Failed to set TCP_NODELAY: %d", WSAGetLastError());
FF_DEBUG("Failed to set TCP_NODELAY: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
} else {
FF_DEBUG("Successfully disabled Nagle's algorithm");
}
@@ -118,7 +118,7 @@ const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* ho
#ifdef TCP_FASTOPEN
// Set TCP Fast Open
if (setsockopt(state->sockfd, IPPROTO_TCP, TCP_FASTOPEN, (char*)&flag, sizeof(flag)) != 0) {
FF_DEBUG("Failed to set TCP_FASTOPEN option: %d", WSAGetLastError());
FF_DEBUG("Failed to set TCP_FASTOPEN option: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
} else {
FF_DEBUG("Successfully set TCP_FASTOPEN option");
}
@@ -141,7 +141,7 @@ const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* ho
.sin_addr.s_addr = INADDR_ANY,
}, sizeof(struct sockaddr_in))) != 0)
{
FF_DEBUG("bind() failed: %d", WSAGetLastError());
FF_DEBUG("bind() failed: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
closesocket(state->sockfd);
freeaddrinfo(addr);
state->sockfd = INVALID_SOCKET;
@@ -177,7 +177,7 @@ const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* ho
if(!result && WSAGetLastError() != WSA_IO_PENDING)
{
FF_DEBUG("ConnectEx() failed: %d", WSAGetLastError());
FF_DEBUG("ConnectEx() failed: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
closesocket(state->sockfd);
state->sockfd = INVALID_SOCKET;
return "ConnectEx() failed";
@@ -213,7 +213,7 @@ const char* ffNetworkingRecvHttpResponse(FFNetworkingState* state, FFstrbuf* buf
DWORD transfer, flags;
if (!WSAGetOverlappedResult(state->sockfd, &state->overlapped, &transfer, TRUE, &flags))
{
FF_DEBUG("WSAGetOverlappedResult failed: %d", WSAGetLastError());
FF_DEBUG("WSAGetOverlappedResult failed: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
closesocket(state->sockfd);
return "WSAGetOverlappedResult() failed";
}
@@ -243,7 +243,7 @@ const char* ffNetworkingRecvHttpResponse(FFNetworkingState* state, FFstrbuf* buf
if (received == 0) {
FF_DEBUG("Connection closed (received=0)");
} else {
FF_DEBUG("Reception failed: %d", WSAGetLastError());
FF_DEBUG("Reception failed: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
}
break;
}
+2
View File
@@ -24,3 +24,5 @@ static inline const char* ffFindFileName(const char* file)
#endif
#define FF_DEBUG(format, ...) FF_DEBUG_PRINT(__FILE__, __LINE__, format, ##__VA_ARGS__)
const char* ffDebugWin32Error(unsigned long errorCode);
+28
View File
@@ -0,0 +1,28 @@
#include "debug.h"
#include <windows.h>
const char* ffDebugWin32Error(DWORD errorCode)
{
static char buffer[256];
DWORD len = FormatMessageA(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
(DWORD) errorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
buffer,
sizeof(buffer),
NULL);
if (len == 0) {
snprintf(buffer, sizeof(buffer), "Unknown error code (%lu)", errorCode);
} else {
// Remove trailing newline
if (buffer[len - 1] == '\n') buffer[len - 1] = '\0';
if (buffer[len - 2] == '\r') buffer[len - 2] = '\0';
snprintf(buffer + len - 2, sizeof(buffer) - len + 2, " (%lu)", errorCode);
}
return buffer;
}