From 33d5753894d6542ae76da2ee4bc81e37467722a2 Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Sat, 5 Dec 2020 21:27:10 -0800 Subject: [PATCH] Introduce and use set_socket_errno() xp_inet_pton() now sets the socket errno value, doing as instructed by the TODO. --- src/xpdev/sockwrap.c | 11 ++++++++++- src/xpdev/sockwrap.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/xpdev/sockwrap.c b/src/xpdev/sockwrap.c index f461b887df..0cf278787c 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 9507b2a61d..73e7c90cce 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 -- GitLab