diff --git a/src/xpdev/sockwrap.c b/src/xpdev/sockwrap.c index f461b887dfaa8a3a2252bc77b4b477a5a0c475cd..0cf278787c931c400e58506ca4fac83b8ed68827 100644 --- a/src/xpdev/sockwrap.c +++ b/src/xpdev/sockwrap.c @@ -508,13 +508,22 @@ DLLEXPORT char* socket_strerror(int error_number, char* buf, size_t buflen) #endif } +DLLEXPORT void set_socket_errno(int err) +{ +#if defined(_WINSOCKAPI_) + WSASetLastError(err); +#else + errno = err; +#endif +} + DLLEXPORT int xp_inet_pton(int af, const char *src, void *dst) { struct addrinfo hints = {0}; struct addrinfo *res, *cur; if (af != AF_INET && af != AF_INET6) { - // TODO: Should set socket_errno to EAFNOSUPPORT + set_socket_errno(EAFNOSUPPORT); return -1; } diff --git a/src/xpdev/sockwrap.h b/src/xpdev/sockwrap.h index 9507b2a61d2aa1ce7e6c8c437d7b47a739ff1f0c..73e7c90cced306b8d1b67ae9e6b9fc1b99d8bf75 100644 --- a/src/xpdev/sockwrap.h +++ b/src/xpdev/sockwrap.h @@ -224,6 +224,7 @@ DLLEXPORT uint16_t inet_addrport(union xp_sockaddr *addr); DLLEXPORT void inet_setaddrport(union xp_sockaddr *addr, uint16_t port); DLLEXPORT BOOL inet_addrmatch(union xp_sockaddr* addr1, union xp_sockaddr* addr2); DLLEXPORT char* socket_strerror(int, char*, size_t); +DLLEXPORT void set_socket_errno(int); DLLEXPORT int xp_inet_pton(int af, const char *src, void *dst); #if defined(_WIN32) // mingw and WinXP's WS2_32.DLL don't have inet_pton(): #define inet_pton xp_inet_pton