#include #include #include "error.h" #include "sock.h" void dragonnet_perror(const char *str) { #ifdef _WIN32 wchar_t *msg = NULL; FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR) &msg, 0, NULL); fprintf(stderr, "%s: %S\n", str, msg); LocalFree(msg); #else // _WIN32 perror(str); #endif // _WIN32 } bool dragonnet_isconnerr() { #ifdef _WIN32 int err = WSAGetLastError(); return err == WSAECONNRESET || err == WSAETIMEDOUT || err == WSAEDISCON; #else // _WIN32 return errno == ECONNRESET || errno == EPIPE || errno == ETIMEDOUT; #endif // _WIN32 } bool dragonnet_isintrerr() { #ifdef _WIN32 return WSAGetLastError() == WSAEINTR; #else // _WIN32 return errno == EINTR; #endif // _WIN32 }